Update avaliable. Click RELOAD to update.
目录

使用 autoxjs 做安卓自动化

安卓手机自动化的方式很多,个人认为使用 autoxjs 是比较简单的一种,下面介绍 autoxjs 的基本开发方式和一些具体案例

1. 使用前提

2. 开发方式

测试的手机与安装 vscode 的电脑在同一局域网中,基本流程是 vscode 使用插件 Auto.js-Autox.js-VSCodeExt 开启服务,手机端 autoxjs 连接,完成后在 vscode 上开发测试部署。

本节只针对在PC上开发的方式,喜欢直接在手机上手搓代码的可跳过

2.1. 电脑开启 autoxjs 服务

start_autoxjs_server_with_vscode

在 vscode 中 command + shift + p 打开 autoxjs 服务端,右下角会显示连接的 IP地址和端口

2.2. 手机连接 autoxjs 服务

mobile_autoxjs_connect_server

连接完成后,在电脑上的 vscode 会提示有新的设备已经连接

01-android-automate-with-autoxjs

2.3. 测试开发 autoxjs 脚本

在 vscode 中创建一个脚本,名称随意,如 test.js,在脚本中写代码,点击右上角运行,即可在手机上执行自动化操作

02-android-automate-with-autoxjs

3. 最佳实践

这里仅代表个人观点,会把通用的操作封装成函数放到 common.js 文件中,如手机解锁、屏幕明暗、声音大小,启动应用、开启代理、关闭应用等,在具体应用代码中通过 require 引入进来,实际的执行脚本中只需要关注应用内部的自动化脚本如何编写。

common.js

module.exports = {
  stopOtherRunningScript: function () {
    console.log("关闭其他运行脚本");
    // .....
  },
  unLockPhone: function () {
    if (!device.isScreenOn()) {
      // .....
    }
  },
  startApp: function (pgName, consoleX, consoleY) {
    // ....
  },
  closeApp: function (backCount, shutdownCallback) {
    // ....
  },
  skeleton: function (
    pgName,
    logX,
    logY,
    executeCallback,
    backCount,
    shutdownCallback
  ) {
    this.unLockPhone();
    console.info(engines.myEngine().getSource());
    this.stopOtherRunningScript();
    var isStarted = this.startApp(pgName, logX, logY);
    sleep(5000);

    if (isStarted) {
      console.log("应用启动");
      executeCallback();
      console.log("应用关闭");
    } else {
      console.error("启动失败");
    }

    this.closeApp(backCount, shutdownCallback);
  },
};

如上面封装的代码,其他脚本只需要调用 skeleton 方法,就会减少很多自动化外部的代码,skeleton 方法对基本的方式进行了封装。

yitao.js

"auto";
var common = require("common.js");

common.skeleton(
  "com.taobao.etao",    // 启动应用的 package 名称
  10,                   // console 的 x 坐标
  1500,                 // console 的 y 坐标
  function () {         // 回调的方法
    var i = 0;
    while (i < 3) {
      if (text("签到领钱").exists()) {
        console.log("签到领钱");
        click(572, 390);
        sleep(3000);
        break;
      } else {
        i++;
        back();
        sleep(1500);
      }
    }

    console.log("签到泡泡");
    click(488, 472);
    sleep(3000);
    click(400, 472);
    sleep(3000);

    var view = textStartsWith("已连续").findOne();
    console.log("签到完成," + view.text());
  },
  2,                    // 结束后调用几次 back()
  null                  // 结束后的回调方法
);

使用封装的 common.js,只需要在回调方法中编写自动化代码就可以,上面代码仅供参考,完整的可去 Github 中下载或者查看

Reference

版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2023/10/android-automate-with-autoxjs/