安卓平台下的自动化脚本工具Hamibot的使用详解

4,190 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

1、前行提要

事情是这样的,我在玩某易的一款养成类游戏的时候,每天要做好多固定任务,很浪费时间。于是就上网找到了这款自动化工具 Hamibot,它有很多强大的功能,比如说OCR、以图找图、找色、文件操作等等。同时这些功能是已经封装好的API,我们只需要编写 JavaScript 脚本即可。可以把它理解为一个只需要写JS代码就能模拟手机操作、调用安卓API的自动化工具。

2、开发流程

下面就为大家介绍下,一个自动脚本的开发流程,以及我在实际编写中遇到的一些问题,避免踩坑。

2.1、注册账号、安装APP

首先,我们需要在手机上安装 Hamibot APP,它是一个基于 AutoJS 开源的项目,然后在其官网上注册账号,并于手机配对。同时我们编写的脚本需要上传到其官网上,才能在手机上运行。(配对好之后,运行脚本时,脚本文件会传输到手机上运行。这里,其官网就相当于服务端,但是这个服务端并没有开源,大家如果有需要而已自行编写服务端接口。)

在手机APP上输入配对码即可完成配对。

image.png

2.2、实战

2.2.1、常用API

1、唤起APP

//唤起APP有两种方式
//1、通过APP名称
// 启动 微信
launchApp('微信');

//但是,如果手机上的应用双开了,那么通过APP名称就只会打开其中一个。这个时候就用到了根据包名启动
//2、通过包名
launch(packageName);

launchPackage(packageName)

2、获取应用包名

这个功能就比较实用了,我们可以根据APP名称获取到应用包名。

let packageName = getPackageName('微信'); // 返回 com.hamibot.hamibot
console.log(packageName);

3、截图

一般来说,我们想要点击或者触摸手机界面上的某些内容或者控件时,就需要先把当前页面截图,然后进行OCR或者以图找图,找到目标空间的坐标或者其ID,然后再模拟具体操作。

// 请求截图权限 true标识横屏
if (!requestScreenCapture(true)) {
    setLog("申请截图权限失败");
    home();
    exit();
}
//截图有两种,一种是提供图片保存路径,另一种是不保存截图,直接返回image对象
//1、先将图片保存到本地
let path = "/storage/emulated/0/Pictures/Screenshots/" + i + ".jpg";
captureScreen(path);
//得到image对象
let img = images.read(path);
// TODO 具体操作
// 回收image对象
img.recycle();

//2、直接得到image对象
let img = captureScreen();

截图后,拿到image对象就可以进行OCR了,这里我用荣耀V20执行的脚本,遇到了一个非常诡异的问题,就是在等待游戏加载的时候会进行循环截图OCR,然后OCR的结果总是第一张截图的,后来换成了小米手机就好了。

4、网络请求

在脚本执行完或者执行过程中,我们需要将执行情况发送通知到微信或者钉钉机器人中。

/**
 * 通过钉钉机器人推送消息
 * @param {*} title 标题
 * @param {*} msg 内容
 */
function sendMsg(title, msg) {
  http.post(
    "https://oapi.dingtalk.com/robot/send?access_token=",
    {
      msgtype: "text",
      text: {
        content: title + "\n\n" + msg,
      },
    },
    {
      contentType: "application/json",
    }
  );
}

2.2.2、APP设置

这里我们一定要打开无障碍服务,同时也可以打开悬浮窗,悬浮窗中有个布局分析功能,可以帮助我们获取到目标区域的位置信息、详细信息等。

aeb7f851faf03f30857e646152b88c2.jpg

3、最后

Hamibot 的官网上有详细的开发文档,只需要懂得基本的JS知识,就可以写脚本了。Github上也有很多开源的脚本,大家也可以参考下。😎