[自动化]AutoJS——Android自动化工具

0 阅读11分钟

[自动化]AutoJS——Android自动化工具

介绍

AutoJS 是一款运行在 Android 平台上的 JavaScript 自动化工具。它基于无障碍服务,可以模拟用户的各种操作(点击、滑动、输入等),读取屏幕上的文字和控件信息,实现自动化测试、批量操作、定时任务等功能。

AutoJS 支持在电脑上使用 VS Code 编写和调试脚本,通过局域网连接到手机直接运行,极大提升了开发效率。

在这里插入图片描述

适用场景:

  • 自动刷视频、点赞、评论
  • 定时签到、打卡
  • 爬取 App 内的数据(如商品信息、文章列表)
  • 批量操作(如群发消息、清理好友)
  • 游戏辅助(简单重复操作)

注意:具体使用需要遵循相关法律法规,否则后果自负。

安装

1. Autojs apk安装

推荐下载Auto 4 版本,无主流限制。

注意:安装好后会有更新提示,千万不要更新,更新后就会变成收费版了,收费版无法在一些App上应用。

下载地址:

  • 推荐版本:AutoJS 4.1.1(无主流限制,稳定且完全免费)
  • 获取方式:
    • 官方 GitHub 仓库(搜索 Auto.js 找到 4.1 版本)
    • 各大软件下载站(请留意文件完整性,建议从可信来源下载)
  • 安装注意事项:安装完成后打开 App,千万不要点击更新!一旦更新到新版(如 4.2+ 或 4.3+),将变成收费版,且可能无法在某些应用上正常使用自动化功能。如果误触更新,建议立即卸载重装旧版本,并关闭应用商店的自动更新功能。

2. adb环境安装

  1. 下载地址:将文件下载下来,解压缩到自定义的安装目录。
  1. 配置环境变量
  • window环境:

按键windows+r打开运行,输入sysdm.cpl,回车。高级》环境变量》系统变量》path。将adb的存放路径添加进path中
在这里插入图片描述

  • Linux/Mac环境:
# 打开配置文件(跟自己使用的终端有关)
# 查看当前所使用的终端类型:echo $SHELL
vim ~/.zshrc

# 新增内容(将路径替换为实际解压路径)
export PATH=${PATH}:/你的解压路径/platform-tools

# 刷新环境变量
source ~/.zshrc
  1. 验证结果:
adb --version

在这里插入图片描述

配置

主要流程:开启开发者模式(USB调试)→ 开启无障碍服务 → 连接电脑(Wi-Fi 或 USB 转发)→ 启动 AutoJS 服务

1. 开启手机开发者模式

不同手机开启开发者模式方式不同,具体可根据自己手机型号版本进行Google。

  1. 进入「设置」→「关于手机」
  2. 连续点击「版本号」7 次,直到提示“您已处于开发者模式”
  3. 返回「设置」主界面,即可看到「开发者选项」
  4. 进入「开发者选项」,可开启 USB 调试(用于电脑 ADB 操作)

2. 开启无障碍服务

AutoJS 的所有自动化操作都依赖 Android 的无障碍服务。

  1. 在手机上打开 AutoJS App
  2. 点击左侧抽屉菜单 →「无障碍服务」
  3. 点击「开启无障碍服务」,跳转到系统设置
  4. 在已下载的服务列表中找到 AutoJS,开启开关
  5. 系统提示可能存在的风险,点击「确定」

验证:返回 AutoJS 后,左上角应显示“无障碍服务已启用”。
在这里插入图片描述

3. 连接电脑(通过局域网调试)

AutoJS 支持在电脑上编写脚本并实时运行在手机上,大幅提升开发体验。

电脑端准备:

  • 安装 VS Code
  • 在 VS Code 扩展商店搜索并安装 Auto.js-VSCodeExt(或 Auto.js-VSCodeExt-Fixed)
    在这里插入图片描述
  • 按下 Ctrl+Shift+P,输入 Auto.js,选择「Auto.js: Start Server」,启动服务。此时会显示服务运行的 IP 和端口(例如 192.168.35.12:9317)
    在这里插入图片描述

手机端连接:
根据需求选择以下任一方式:

  • 方式一:通过 Wi-Fi 连接(无线,无需数据线)

    1. 确保手机与电脑连接 同一个 Wi-Fi
    2. 打开 AutoJS App,点击左侧抽屉菜单 →「连接电脑」
    3. 在弹出的对话框中输入电脑显示的 IP 地址(不需要输入端口号,例如 192.168.35.12)
      在这里插入图片描述
    4. 点击「连接」,看到“连接成功”提示即完成
  • 方式二:通过 USB 转发连接(有线,连接更稳定,无需 Wi-Fi)

    1. 用 USB 数据线将手机连接到电脑,并确保已开启 USB 调试(见「开启手机开发者模式」)
    2. 在电脑命令行中执行以下命令:
    adb forward tcp:9317 tcp:9317
    
    1. 在 VS Code 中按 Ctrl + Shift + P,选择「Auto.js: Start Server」启动服务
    2. 在手机端 AutoJS 的「连接电脑」对话框中,输入 IP 地址 127.0.0.1
    3. 点击「连接」,看到“连接成功”提示即完成
      在这里插入图片描述

常见连接问题及解决:

问题现象可能原因解决方案
连接超时/失败手机与电脑不在同一网络检查 Wi-Fi 是否相同,或尝试用电脑开热点、手机连接热点
连接后无法运行脚本防火墙阻止了端口通信关闭电脑防火墙测试,或添加入站规则允许 9317 端口
手机 ping 不通电脑路由器开启了 AP 隔离登录路由器管理界面,关闭“AP 隔离”或类似选项
连接成功但执行无反应AutoJS 服务未完全启动重启 VS Code 服务,或重启手机 AutoJS 应用

4. 启动 AutoJS 服务

每次打开 AutoJS 后,无障碍服务会自动生效(部分手机可能会被系统限制)。如果之前已开启,可直接使用。
若想确保服务稳定,可在「无障碍服务」界面检查状态,必要时重新关闭再开启。

使用

1. 快速入门

下面将通过一个简单的案例,演示如何通过js启动小红书 App。
在 VS Code 中新建文件 main.js,粘贴代码:

// 1. 确保无障碍服务已开启
auto.waitFor();

// 2. 通过应用名称启动小红书(需与手机显示的名称完全一致)
var appName = "小红书";
launchApp(appName);

// app.launchPackage("com.xingin.xhs"); // 通过小红书包名启动

// 3. 等待应用启动(3秒)
sleep(3000);

// 4. 简单验证:查找包含“搜索”描述的控件,若找到则认为成功
var searchBox = descContains("搜索").findOne(5000);
if (searchBox) {
    toastLog("小红书启动成功!");
} else {
    toastLog("可能未进入主界面,请检查");
}

// 5. 脚本结束

运行:

  • 确保电脑与手机已连接(VS Code 左下角显示设备图标)
  • 在 VS Code 中打开该脚本,按 F5 或通过命令面板选择「Auto.js: Run」
  • 手机将自动打开小红书,并弹出成功提示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

关键函数说明:

  • auto.waitFor():等待无障碍服务启用,若未开启则提示用户手动开启。
  • launchApp(appName):通过 App 名称启动应用(系统需识别此名称)。
  • descContains(“搜索”):根据控件的 content-desc 属性模糊查找元素。
  • findOne(timeout):在指定时间内查找控件,若找到返回控件对象,否则返回 null。

TIPS:打开应用之后,后续就可以通过其他API模拟用户操作实现自动化流程。

2. 运行与调试

  • 运行脚本:在 VS Code 中打开脚本文件,按 F5 即可运行。脚本会在连接的手机上实时执行。
  • 停止脚本:如需中途停止,可按 Shift + F5。
  • 查看日志输出:脚本中的 console.log() 信息会显示在 VS Code 的终端(Terminal)面板中,是排查逻辑错误最直接的方式。toastLog() 则会在手机屏幕上弹出消息框并同时输出日志,适合快速确认关键节点。
  • 利用布局分析工具:Auto.js 手机 App 自带“布局分析”功能。在 App 的侧边菜单中找到它,点击屏幕上任意元素,即可查看其 id、text、desc 等关键属性。这是编写和调试选择器最核心的工具。
  • 断点调试:虽然不如前端开发那么完善,但你可以通过在代码中插入 exit() 或 sleep() 配合日志输出来模拟断点效果,逐步排查问题。

3. 实战项目:每日自动签到

下面我们实现一个完整的项目,通过Autojs实现支付宝的每日自动签到。

目标拆解

  1. 启动支付宝:通过应用名或包名打开支付宝 App。
  2. 导航至会员页面:进入「我的」→「支付宝会员」(或「蚂蚁会员」)页面。
  3. 执行签到:查找并点击“签到”按钮,完成签到领积分操作。
  4. 结果反馈:通过日志或弹窗提示签到结果。
  5. 定时执行:利用 AutoJS 定时任务功能,设置为每天固定时间自动运行。

详细步骤:

  1. 通过VSCode Autojs插件新建一个完整的AutoJS项目
    在这里插入图片描述
  2. 新建之后,脚本文件默认为main.js

以下脚本主要为了快速演示效果,大部分采用坐标进行点击,不具有通用性。

main.js:

// 等待无障碍服务启动
auto.waitFor();

// 配置参数
const PACKAGE_NAME = "com.eg.android.AlipayGphone";
const TIMEOUT = 5000; // 超时时间 5秒

try {
    // 1. 检查支付宝是否已在运行
    let currentPkg = currentPackage();
    if (currentPkg === PACKAGE_NAME) {
        toastLog("支付宝已在运行,跳过启动步骤");
    } else {
        toastLog("正在打开支付宝...");
        app.launch(PACKAGE_NAME);
        // 等待应用启动
        waitForPackage(PACKAGE_NAME, 10000);
    }

    // 2. 等待主页加载稳定
    // 建议:检测首页特定元素出现,比固定 sleep 更可靠
    // 这里暂时使用 sleep,可根据设备性能调整
    sleep(3000);

    // 3. 点击【我的】Tab
    // 优先尝试 UI 选择器,如果失败则使用坐标兜底
    // let myTab = id("tab_description").text("我的").findOne(TIMEOUT);
    // if (myTab) {
    //     safeClick(myTab);
    //     toastLog("已点击【我的】Tab (UI)");
    // } else {
    //     toastLog("未找到【我的】UI元素,使用坐标兜底");
    //     clickByBounds(927, 2208, 1017, 2298);
    // }
    id("tab_description").className("android.widget.TextView").text("我的").findOne().parent().waitFor()
    sleep(2000);

    // 4. 点击【支付宝会员】
    let memberEntry = text("支付宝会员").findOne(TIMEOUT);
    if (memberEntry) {
        safeClick(memberEntry);
        toastLog("已点击【支付宝会员】 (UI)");
    } else {
        toastLog("未找到【支付宝会员】UI元素,使用坐标兜底");
        clickByBounds(180, 531, 420, 595);
    }
    sleep(2000);

    // 5. 点击【每日签到】
    // 重要:先检查元素是否存在
    let signBtn = className("android.widget.TextView").text("每日签到").findOne(TIMEOUT);
    if (signBtn) {
        safeClick(signBtn);
        toastLog("已点击【签到】");
    } else {
        toastLog("未找到【每日签到】按钮,可能已签到或UI变更");
    }
    
    sleep(2000);
    // 任务完成后回到支付宝首页
    back();
    back();
    // 点击首页按钮
    id("tab_description").className("android.widget.TextView").text("首页").findOne().parent().waitFor()
    toastLog("任务执行完毕,准备退出...");

} catch (e) {
    // 捕获中间过程的错误
    toastLog("执行过程中发生错误: " + e.message);
    console.error(e);
} finally {
    // 无论成功还是失败,都执行清理工作
    try {
        // 返回桌面
        home();
        // 短暂等待以确保 home 动作完成
        sleep(1000);
        // 停止脚本
        exit();
    } catch (exitError) {
        // 忽略退出时的中断异常,这通常是正常的
        console.log("脚本已终止");
    }
}

/**
 * 安全点击:处理 clickable=false 的情况
 */
function safeClick(element) {
    if (!element) return false;
    
    // 1. 尝试直接点击
    if (element.clickable() && element.click()) {
        return true;
    }
    
    // 2. 尝试点击父容器
    let parent = element.parent();
    if (parent && parent.clickable() && parent.click()) {
        return true;
    }
    
    // 3. 尝试坐标点击
    let bounds = element.bounds();
    if (bounds) {
        return click(bounds.centerX(), bounds.centerY());
    }
    
    return false;
}

/**
 * 通过 bounds 位置点击指定位置
 */
function clickByBounds(left, top, right, bottom) {
    var x = Math.round((left + right) / 2);
    var y = Math.round((top + bottom) / 2);
    return click(x, y);
}
  1. 调试:
  • 确保已启动Autojs Server
  • 确保手机已开启 AutoJS 的无障碍服务且已连接到电脑(此处我通过同一wifi直连)
  • 按F5运行脚本,观察手机是否自动运行,是否符合预期
  1. 设置定时任务:让脚本每天自动运行,有以下两种方式。
  • 方式一(推荐):在 VS Code 中按 Ctrl + Shift + P,选择 Auto.js: Save,脚本会自动保存到手机的默认目录(通常是 /sdcard/脚本/)。
  • 方式二(手动):将 .js 文件通过微信/QQ发送到手机,在 AutoJS App 中点击右下角「+」→「导入」即可。

脚本导入后:
a.在 AutoJS App 中找到该脚本。
b.点击右侧按钮 - 选择「更多」→「定时任务」→ 设置每天固定时间(如 08:00)。
在这里插入图片描述
c.确保 AutoJS 拥有“自启动”和“后台保持运行”权限。

  1. 可选:打包为应用apk(如果需要将脚本进行分发,可直接打包为apk)。
    选择脚本进行打包:脚本 - 脚本右侧按钮 - 更多 - 打包应用 - 填写打包信息
    PS:如果打包过程中提示没有插件,可下载下面apk,进行安装。

下载地址:AutoJS4.1.1打包插件

选中脚本 - 点击更多:
在这里插入图片描述
点击打包应用:
在这里插入图片描述

填写相关打包信息,然后点击√即可打包。打包后可直接安装:
在这里插入图片描述

最终效果:
在这里插入图片描述
6. 接着就可以安装到自己手机,快速触发脚本
在这里插入图片描述

注意事项

  1. 无障碍服务:AutoJS 依赖无障碍服务,部分系统(如 MIUI、EMUI)可能需要额外的权限设置,如“后台弹出界面”“自启动”“省电无限制”等,以确保脚本在后台可靠运行。
  2. 版本更新:切勿升级 AutoJS 4 系列到更高版本,否则会失去免费功能。
  3. 界面变化:App 更新可能导致控件属性改变,需定期维护脚本。
  4. 合法性:请勿使用 AutoJS 进行违规操作(如刷单、恶意攻击等),尊重平台规则。
  5. 资源占用:长时间运行脚本会增加电量和内存消耗,建议合理控制循环间隔。

参考资料

  • AutoJS 相关文档:autojs.cc/v8/、https:/…
  • AutoJS 社区讨论:百度贴吧“autojs”吧、酷安评论区
  • 选择器 API 参考:className、id、text、desc 等用法可查阅官方文档