基于Auto.js无障碍开发的安卓端一键自动设置工具,可以避免很多重复步骤。原项目通过百度发现: gitee.com/westinyang/… ,只有js,却能打包出带界面的apk出来,很神奇。
原来是auto.js编写的。打包过程在原项目有罗列,这里补充几点:手机上安装 auto.js,然后电脑上安装vscode 以及 autojs插件,手机操作 autojs 主界面左侧抽屉,连接电脑。如果无法连接,确保处于同一wifi,需要让 vscode 通过防火墙,如果还不行,也可以直接复制文件夹到手机的 /sdcard/脚本 文件夹。
连接过程: vscode命令 auto : start server -> 手机连接电脑
开发过程:vscode 修改代码 -> ctrl+s 保存 -> vscode命令 auto : save project,如果保存成功,控制台会有显示、手机上也有提示。开发过程缺乏输出,我都是注释掉一段,运行成功了,再调试下一段。console.log 哪里看?只好 toast 代替一下。
原项目切换到wifi界面就停下来了。这里完善安卓 11 自动设置WiFi代理的脚本,顺便添加 一键切换“锁屏双击亮屏”的开关。
运行效果:
图片.jpg 视频.gif
完整代码:
"ui";
var _proxy_port = 8888;
init_ui();
function init_ui() {
ui.layout(
<vertical>
<appbar>
<toolbar title="WiFi代理设置 v1.1"/>
</appbar>
<vertical padding="16">
<vertical>
<text>代理IP</text>
<input id="proxy_ip" text="192.168.0.101"/>
<text>代理端口</text>
<radiogroup id="proxy_port" orientation="horizontal">
<radio text="8080" id="r1" marginRight="16"></radio>
<radio text="8888" id="r2" marginRight="16" checked="true"></radio>
<radio text="8866" id="r3" marginRight="16"></radio>
</radiogroup>
</vertical>
<vertical marginTop="16">
<text>[Android 9] 设置 → WLAN → WLAN → 已连接 → 修改 → ...</text>
<horizontal height="88">
<button id="open_android_9" text="开启代理" marginRight="10" style="Widget.AppCompat.Button.Colored" height="match_parent" layout_weight="1"/>
<button id="close_android_9" text="关闭代理" height="match_parent" layout_weight="1" />
</horizontal>
</vertical>
<vertical marginTop="16">
<text>[双击亮屏] 设置 → 锁屏 → 双击亮屏</text>
<horizontal height="88">
<button id="open_android_7"
text="切换"
style="Widget.AppCompat.Button.Colored"
width="match_parent"
height="match_parent"
/>
</horizontal>
</vertical>
</vertical>
</vertical>
);
// Port checked
ui.r1.on("click", (checked)=>{
_proxy_port = 8080;
});
ui.r2.on("click", (checked)=>{
_proxy_port = 8888;
});
ui.r3.on("click", (checked)=>{
_proxy_port = 8866;
});
// Android 7
ui.open_android_7.click(function(){
var proxy_ip = ui.proxy_ip.getText();
// ...
threads.start(function(){
open_android_7_handler(proxy_ip, _proxy_port);
});
});
// Android 9
ui.open_android_9.click(function(){
var proxy_ip = ui.proxy_ip.getText();
// ...
threads.start(function(){
open_android_9_handler(proxy_ip, _proxy_port);
});
});
ui.close_android_9.click(function(){
threads.start(function(){
close_android_9_handler();
});
});
// var proxy_ip = ui.proxy_ip.getText();
// // ...
// threads.start(function(){
// // tg
// open_android_7_handler(proxy_ip, _proxy_port);
// });
}
const interval = 300;
/**
* 开启代理(Android 7)
* @param proxy_ip
* @param proxy_port
*/
function open_android_7_handler(proxy_ip, proxy_port) {
// 打开设置
var settingsPackageName = app.getPackageName("设置");
app.launchPackage("com.android.settings")
// app.startActivity({
// // action: "android.settings.SECURITY_SETTINGS",
// packageName: "com.android.settings",
// // className :"com.android.settings.ChooseLockGeneric"
// });
waitForPackage(settingsPackageName)
sleep(500);
// 滚动到顶部
// scrollUp();
sleep(500);
scrollForward();
swipe(0,1000,0,800,100);
var ret = try_(function(){
//sleep(100);
// for(let i = 200;i<800;i+=10){
// sleep(8)
// swipe(i,800,i,1600,8)
// }
// gesture(2000,[200,800],[200,1500],[1000,1500],[1000,800],[200,800])
if(!click("锁屏", 0)) throw 1;
var b = text("锁屏").findOne().bounds();
click(b.centerX(), b.centerY());
}, interval*2, 9);
if(!ret) {toast("错误::锁屏");return;}
sleep(500);
var ret = try_(function(){
var b = className("android.widget.TextView").textContains("双击").findOne().bounds();
click(b.centerX(), b.centerY());
}, interval, 9);
if(!ret) {toast("错误::双击亮屏");return;}
toast("自动开完毕");
}
function try_(fun, _interval, theta){
while(--theta>0) try{
sleep(_interval);
fun();
return 1;
}catch(e){}
return 0;
}
/**
* 开启代理(Android 9)
* @param proxy_ip
* @param proxy_port
*/
function open_android_9_handler(proxy_ip, proxy_port) {
// 检查无障碍
// auto();
// sleep(500);
// toast("1自动开启代理 " + proxy_ip + ":" + proxy_port);
// toast("点击 修改??" + (className("android.widget.TextView").textContains("WiFi").find().empty()));
// return
// 打开设置
var settingsPackageName = app.getPackageName("设置");
app.launchPackage(settingsPackageName)
waitForPackage(settingsPackageName)
// 滚动到顶部
scrollUp();
// 点击 WLAN
//while(!click("WLAN", 0)) sleep(interval/2);
var ret = try_(function(){
var b = text("WLAN").findOne().bounds();
click(b.centerX(), b.centerY());
}, interval, 9);
if(!ret) {toast("错误::WLAN");return;}
//className("android.widget.TextView").descContains("网络详情").findOne().click();
// click("我的设备", 0);
// toast("点击 修改??" + className("android.widget.TextView").textContains("双卡与移动网x络").find().empty());
// className("android.widget.TextView").textContains("WLAN").findOne().parent().parent().click();
click("WLAN", 0);
// // 点击 WLAN
// while(!click("WLAN", 0));
sleep(interval);
toast("点击 修改??" + (className("android.view.View").textContains("网络详情").find().empty()));
// 点击 修改
className("android.widget.ImageView").descContains("网络详情").findOne().click();
var ret = try_(function(){
var b = text("代理").findOne().bounds();
click(b.centerX(), b.centerY());
sleep(interval/2);
click(proxy_ip?"手动":"无", 0);
}, interval, 5);
if(!ret) {toast("错误::代理设置--手动");return;}
if(proxy_ip) {
//设置ip、port
var ret = try_(function(){
var ets = className("EditText").find();
ets[0].setText("" + proxy_ip);
ets[1].setText("" + proxy_port);
//ets[1].setText("" + proxy_port);
}, interval, 5);
if(!ret) {toast("错误::设置ip、port");return;}
}
sleep(parseInt(interval*1.25));
// 点击 保存
var ret = try_(function(){
var sel = descContains("确");
var b = sel.findOne().bounds();
click(b.centerX(), b.centerY());
}, interval, 5);
if(!ret) {toast("错误::点击 保存");return;}
// // 返回
//home();
toast("自动"+(proxy_ip?"开启":"关闭")+"代理完毕");
}
/**
* 关闭代理(Android 9)
*/
function close_android_9_handler() {
open_android_9_handler();
}
后记
初识 autojs 又是一个消散了开源热情的项目。而且作者已删库,结果github上其他fork也搜索不出,不知何原理?
而且旧版本也无法运行,提示需要更新。我下载的是野生应用市场里的修改版。
MIUI 无障碍权限可用 无障碍管理器 管理,没有读秒倒计时!