此脚本非常的简单,就是不断的下载删除,操作也非常的简单,我分享一下这个auto.js写的源码,有兴趣的朋友可以试一下。
"ui";
var myapp = {}
myapp.sdk = ""
var mainThread = 0
var 悬浮创建 = 0
var 执行数量 = 0
ui.layout(
<ScrollView >
<vertical>
<appbar>
<toolbar id="toolbar" title="网易云音乐下载删除" />
</appbar>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<Switch id="autoService" text="无障碍权限" checked="{{auto.service != null}}" w="auto" textStyle="bold" />
<Switch id="overlayService" text="悬浮窗权限" checked="{{auto.service != null}}" w="auto" textStyle="bold" />
</linear>
</vertical>
<View bg="#E51400" h="*" w="5" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<text text="操作次数" textcolor="black" w="auto" />
<input id="执行数量" inputType="text" text="" w="120" />
<text text="次" textcolor="black" w="auto" />
</linear>
<linear>
<text text="下载超时时间" textcolor="black" w="auto" />
<input id="等待时间" inputType="text" text="" w="120" />
<text text="秒" textcolor="black" w="auto" />
</linear>
</vertical>
<View bg="#ff5722" h="*" w="5" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<text textColor="red" w="*" textSize="16sp">[网易云音乐版本 8.2.41.151413]</text>
</vertical>
<View bg="#ff5722" h="*" w="5" />
</card>
<button style="Widget.AppCompat.Button.Colored" margin="5" id="start">保存脚本设置</button>
</vertical>
</ScrollView>
);
读取界面配置(true)
ui.autoService.on("check", function (checked) {
// 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
if (checked && auto.service == null) {
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
}
if (!checked && auto.service != null) {
auto.service.disableSelf();
}
});
ui.emitter.on("resume", function () {
// 此时根据无障碍服务的开启情况,同步开关的状态
ui.autoService.checked = auto.service != null;
});
ui.overlayService.on("check", function (checked) {
// 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
if (checked) {
try {
int = app.startActivity({
packageName: "com.android.settings",
className: "com.android.settings.Settings$AppDrawOverlaySettingsActivity",
data: "package:" + context.getPackageName().toString()
});
} catch (err) {
app.openAppSetting(getPackageName("网易云音乐下载删除"));
}
toast("请打开悬浮窗开关");
}
if (!checked && auto.service != null) {
//auto.service.disableSelf();
toast("已关闭悬浮窗权限");
}
});
ui.start.on("click", () => { //按钮单击事件 哪个按钮 start 需要修改这个ID
保存界面配置() //先读取配置
读取界面配置(false)
if (auto.service == null) {
toastLog("请先开启无障碍服务!");
return
};
if (悬浮创建 == 0) {
threads.start(function () {
floatyLogInit(5, 0, 10, true)
})
// 屏蔽音量键调节声音
events.setKeyInterceptionEnabled("volume_up", true);
events.setKeyInterceptionEnabled("volume_down", true);
events.observeKey();
//监听音量键按下
events.onKeyDown("volume_up", () => {
exit()
});
events.onKeyDown("volume_down", () => {
if (mainThread == 0) {
mainThread = threads.start(APP_main);
} else {
addlog('脚本停止运行')
mainThread.interrupt();
mainThread = 0
}
});
悬浮创建 = 1
}
home()
toast('脚本转入后台')
});
function APP_main() {
addlog('脚本开始运行')
var 删除成功 = false
var 下载成功 = false
var 数量叠加 = false
var 下载计次 = 0
while (true) {
if (id('com.netease.cloudmusic:id/downloadBlock').findOnce()) {
if (!删除成功) {
addlog('点击更多')
Click(desc('更多').findOnce())
} else if (!下载成功) {
if (下载计次 >= 2) {
下载计次 = 0
下载成功 = true
} else {
addlog('点击下载')
var node = id('com.netease.cloudmusic:id/downloadBlock').findOnce()
if (node != null) {
node.click()
}
下载计次++
}
} else {
if (!数量叠加) {
执行数量++
if (执行数量 >= parseInt(myapp.执行数量)) {
addlog('当前下载删除任务完成 脚本停止')
return
} else {
addlogEX('操作次数:' + 执行数量 + '/' + myapp.执行数量)
}
数量叠加 = true
}
下载计次 = 0
back()
}
} else if (text('删除').findOnce()) {
addlog('点击删除')
Click(text('删除').findOnce())
删除成功 = true
} else if (text('清空下载文件').findOnce()) {
addlog('清空下载文件')
Click(text('清空下载文件').findOnce())
} else if (textContains('下载音质').findOnce()) {
addlog('选择下载音质标准')
Click(textContains('标准').findOnce())
} else if (text('下载').findOnce()) {
addlog('点击确认下载')
Click(text('下载').findOnce())
下载成功 = true
} else if (text('我喜欢的音乐').findOnce()) {
APP_下载判断()
addlog('点击我喜欢的音乐')
if (Click(text('我喜欢的音乐').findOnce())) {
下载成功 = false
删除成功 = false
数量叠加 = false
}
}
sleep(800)
}
}
function Click(node) {
try {
if (node) {
if (node.click()) {
return true
} else if (node.parent().click()) {
return true
} else if (node.parent().parent().click()) {
return true
} else if (node.parent().parent().parent().click()) {
return true
} else if (node.parent().parent().parent().parent().click()) {
return true
} else if (node.parent().parent().parent().parent().parent().click()) {
return true
} else if (node.parent().parent().parent().parent().parent().parent().click()) {
return true
}
}
} catch (e) { }
return false
}
function floatyLogInit(linesCount, x, y, islog) {
let _linesCount = linesCount || 6;
if (typeof _linesCount != 'number') _linesCount = 6;
if (typeof x != 'number') x = 0;
if (typeof y != 'number') y = 10;
if (typeof islog != 'boolean') islog = true;
let initX = x
let initY = y
floatyLogW = floaty.rawWindow(
<card w="*" h="auto" marginLeft="3" cardBackgroundColor='#66242424' cardCornerRadius="8dp" cardElevation="1dp" gravity="center_vertical">
<vertical paddingLeft="5" paddingRight="5" w='*'>
<Chronometer id='chronometer' textSize="13dp" textColor="#DC143C" w="*" style="Widget/AppCompat.Button.Borderless" textStyle='bold' />
<button id='logEX' textSize="13dp" textColor="#20B2AA" style="Widget/AppCompat.Button.Borderless" textStyle='bold'
layout_weight='5' layout_width="wrap_content" layout_height="wrap_content" />
<button id='log' textSize="13dp" textColor="#FFD700" style="Widget/AppCompat.Button.Borderless" textStyle='bold'
layout_gravity="right" layout_weight='5' layout_width="wrap_content" layout_height="wrap_content" />
</vertical>
</card>
);
let nowlogArr = [];
addlogEX = function (printContent) {
ui.run(() => { floatyLogW.logEX.text(printContent) })
}
floatyLogShow = function (x, y) {
let _x = x || initX
let _y = y || initY
ui.run(() => { floatyLogW.setPosition(_x, _y) })
}
floatyLogHide = function () {
ui.run(() => { floatyLogW.setPosition(3000, 3000) })
}
function dateFormat(date, fmt_str) {
return java.text.SimpleDateFormat(fmt_str).format(new Date(date || new Date()));
}
ui.run(() => {
addlog('音量-键 【启动】【停止】脚本')
addlog('音量+键 【结束】脚本进程')
addlogEX('操作次数:' + 执行数量 + '/' + myapp.执行数量)
floatyLogW.chronometer.setFormat('[运行时间] %s')
floatyLogW.chronometer.start()
floatyLogW.setTouchable(false);
floatyLogW.setPosition(x, y);
})
}
function 保存界面配置() {
保存本地数据(myapp.存储标识, "执行数量", ui.执行数量.text())
保存本地数据(myapp.存储标识, "等待时间", ui.等待时间.text())
};
function 读取界面配置(是否设置组件值) { //逻辑值 是否设置组件值
if (读取本地数据(myapp.存储标识, "执行数量") != undefined) {
myapp.执行数量 = 读取本地数据(myapp.存储标识, "执行数量")
};
是否设置组件值 && ui.执行数量.setText(myapp.执行数量);
if (读取本地数据(myapp.存储标识, "等待时间") != undefined) {
myapp.等待时间 = 读取本地数据(myapp.存储标识, "等待时间")
};
是否设置组件值 && ui.等待时间.setText(myapp.等待时间);
};
function 保存本地数据(存储标识, ID, 界面组件值) {
const storage = storages.create(存储标识); //创建storage对象
storage.put(ID, 界面组件值);
};
function 读取本地数据(存储标识, ID) {
const storage = storages.create(存储标识); //创建storage对象
if (storage.contains(ID)) {
return storage.get(ID, "");
};
//默认返回undefined
};
function 到期判断(到期时间) {
var 输入框月份, 输入框日期, 输入框小时, 输入框分钟, 输入框日期, 输入框年份, 输入框秒数
输入框日期 = 到期时间
输入框时间 = 输入框日期.split("S")
if (输入框时间.length == 6) {
输入框年份 = parseInt(输入框时间[0], 16)
输入框月份 = parseInt(输入框时间[1], 16)
输入框日期 = parseInt(输入框时间[2], 16)
输入框小时 = parseInt(输入框时间[3], 16)
输入框分钟 = parseInt(输入框时间[4], 16)
输入框秒数 = parseInt(输入框时间[5], 16)
输入框年份 = 输入框年份 / 1990
输入框月份 = 输入框月份 / 1990
输入框日期 = 输入框日期 / 1990
输入框小时 = 输入框小时 / 1990
输入框分钟 = 输入框分钟 / 1990
输入框秒数 = 输入框秒数 / 1990
var 激活卡时间 = new Date(输入框年份, 输入框月份 - 1, 输入框日期, 输入框小时, 输入框分钟, 输入框秒数);
var 现在时间 = new Date()
if (激活卡时间 < 现在时间) {
return false
} else {
toastLog("到期时间:" + 输入框年份 + "年" + 输入框月份 + "月" + 输入框日期 + "日 " + 输入框小时 + "时" + 输入框分钟 + "分" + 输入框秒数 + "秒")
return true
}
} else {
return false
}
}版权声明:本文为weixin_42596619原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。