Autojs:免root安卓自动化工具

运行环境

Auto.js因某种原因全网下架,但是在作者个人博客中还有下载链接,访问 https://dl.recolic.net/autojshttps://dl.recolic.cc/autojs 下载。

在手机上安装autojs并授予无障碍服务和悬浮窗权限(如果用华为手机,悬浮窗权限需要手动到应用管理设置)。

转到手机,开启autojs中以下几个选项:

显示autojs悬浮窗,点击,从上到下功能依次为:脚本列表,录制(需root),元素分析(最常用),取消执行,设置。

开发环境

如果需要自定义脚本,推荐在电脑编写,推送到运行。推荐使用vscode。

安装auto.js的vscode插件。(拓展ID:hyb1996.auto-js-vscodeext)

按 Ctrl+Shift+P 或点击”查看”->“命令面板”可调出命令面板,输入 Auto.js 可以看到几个命令,移动光标到命令Auto.js: Start Server,按回车键执行该命令。

此时VS Code会在右上角显示”Auto.js server running”,即开启服务成功。

将手机连接到电脑启用的Wifi或者同一局域网中。通过命令行ipconfig(或者其他操作系统的相同功能命令)查看电脑的IP地址。在Auto.js的侧拉菜单中启用调试服务,并输入IP地址,等待连接成功。

编辑好文件之后,同样按 Ctrl+Shift+P,使用RunOnDevice一键推送到手机自动执行。

要显示来自Auto.js的日志,打开 VS Code上面菜单的”帮助”->“切换开发人员工具”->“Console”即可。

实例:某软件的自动注册

function getphonenumber() {
    // 打开SafeUm,稍作等待
    var appName = "SafeUM";
    launchApp(appName);
    sleep(1000);
    
    // 点击创建新账号按钮
    var SignUp = id("login_button_signin").findOne();
    if (SignUp) {
        SignUp.click();
        sleep(1000);
    }
    
    //用户名随机生成
    var usr = 'kdsag'+random(1,1000000)
    
    //第一句将所有文本框内全部填充12345678,第二、三句将某一id的文本框填入用户名
    setText('12345678');
    var username = id("signinbylogin_editText1").find();
    username.setText(usr);
    
    //点击两个按钮,中间间隔2000秒
    click('SUBMIT');
    sleep(2000);
    click("BEGIN TO USE")
    
    //当欢迎界面(id为signin...)存在时(创建失败),持续点击重复尝试按钮
    while(id("signin_loginbth").exists()) {
        sleep(5000);
        click("PLEASE TRY AGAIN")
    }
    
    //转到设置页面(点击setting),获取phonenumber所在元素,获取元素内容,并且输出到日志
    sleep(5000);
    click('Settings');
    phonenumber = id("account_number_safenum").findOne().text();
    console.log(phonenumber);
    return phonenumber;
    // launchApp("Nekogram X");
    // sleep(100);

}

常见问题

无法输入、点击(控件定位失败)

使用布局层次分析能够更好地准确定位某一元素。另外,请查看元素属性是否支持点击或文本输入。

如果确实无法获取id等,可以使用className配合数组进行获取。

/* arr内包裹find()返回的所有className为"android.widget.EditText"的元素; */
var arr = className("android.widget.EditText").find();
var object = arr[2];//"我需要数组的第3个元素;"

参考:

  1. https://blog.csdn.net/qq_52697994/article/details/117173649 classname获取控件
  2. https://blog.csdn.net/RIDER_hjf/article/details/102911545 结合uiautomatorviewer
  3. https://zhuanlan.zhihu.com/p/90065914 入门教程