【Autojs】MIUI 安卓11 自动 自动设置WiFi代理 、一键切换双击亮屏。

923 阅读3分钟

基于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 无障碍权限可用 无障碍管理器 管理,没有读秒倒计时!