三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

基于Auto.js与无障碍服务的Android自动化脚本开发实战

基于Auto.js与无障碍服务的Android自动化脚本开发实战

1. 项目初探:一个被低估的自动化利器

如果你经常在手机上重复一些机械性的操作,比如每天定时打开某个App签到领积分、批量处理图片、或者在不同应用间来回切换复制粘贴信息,那你一定对“自动化”这三个字充满渴望。市面上有不少自动化工具,但要么收费不菲,要么功能受限,要么学习曲线陡峭。今天要聊的这个开源项目——Alipay AutoJS,可能是一个被很多人忽略的宝藏。它不是一个官方产品,而是一个基于Auto.js引擎,深度适配支付宝生态的自动化脚本工具集。简单来说,它让你能用几行简单的JavaScript代码,就指挥你的手机自动完成一系列操作,而且完全免费。

我第一次接触它,是因为需要每天在支付宝的多个小程序里完成签到任务,手动操作耗时又无聊。在尝试了各种“自动化助手”App后,要么被广告烦死,要么发现核心功能需要付费解锁。直到发现了这个开源项目,它直接解决了我的痛点:免费、无需Root、对支付宝场景支持友好。它的核心价值在于,将通用的自动化能力(Auto.js)与具体的业务场景(支付宝内的各种任务)结合了起来,提供了大量开箱即用的脚本案例。这意味着,即使你完全不懂编程,也能通过修改现成的脚本来满足自己的需求;而如果你懂点JavaScript,那更是如鱼得水,可以创造出无限可能。

2. 核心原理拆解:Auto.js引擎与无障碍服务

要理解Alipay AutoJS能做什么,首先要明白它的基石——Auto.js。这不是一个单一的应用,而是一个运行在Android系统上的JavaScript引擎。它的魔力来自于Android系统提供的一项底层服务:无障碍服务(Accessibility Service)

2.1 无障碍服务:自动化操作的“眼睛”和“手指”

你可以把无障碍服务想象成一个系统级的“外挂”。它最初是为了帮助视障用户操作手机而设计的,比如读取屏幕内容(TalkBack)或模拟点击。正因为拥有极高的权限,它能够:

  1. 监听全局事件:知道哪个应用在前台、窗口发生了什么变化。
  2. 获取屏幕内容:不仅仅是截图,而是获取屏幕上所有控件的层次结构信息,比如一个按钮的文字是“立即签到”,它的坐标在哪里。
  3. 模拟用户操作:精确地执行点击、滑动、长按、输入文本等操作。

Alipay AutoJS正是利用了这个服务。当你启用项目的自动化脚本时,实际上是在调用Auto.js引擎,引擎再通过无障碍服务去“观察”支付宝的界面,找到目标按钮或文字,然后“替”你点击它。整个过程完全模拟真人操作,因此理论上不会被应用服务器端轻易识别为机器行为(当然,过于频繁或规律的操作仍需注意)。

2.2 为什么是JavaScript?

选择JavaScript作为脚本语言,是Auto.js成功的关键之一。相比其他需要复杂编译环境的语言,JS有三大优势:

  • 入门简单:语法相对友好,网络上有海量的学习资源和现成代码片段。
  • 解释执行:无需编译,写完代码可以直接运行,即时看到效果,非常适合快速调试和迭代。
  • 生态丰富:Auto.js引擎自身提供了大量针对移动自动化的API,例如click()swipe()findOne()等,大大降低了编码难度。

Alipay AutoJS项目在此基础上,进一步封装了许多针对支付宝界面的通用函数。例如,一个典型的脚本片段可能长这样:

// 等待支付宝首页加载 auto.waitFor(); // 打开支付宝 launchApp("支付宝"); sleep(3000); // 等待3秒 // 查找并点击“市民中心”图标 if (text("市民中心").findOne().click()) { toast("成功进入市民中心"); } else { toast("未找到市民中心,脚本停止"); exit(); }

这段代码清晰展示了其工作流:等待环境就绪 -> 启动应用 -> 等待界面稳定 -> 查找特定控件 -> 执行操作 -> 反馈结果。即使不懂代码,你也能大致猜出它在做什么。

3. 环境搭建与实战入门

理论讲完,我们来点实际的。要让Alipay AutoJS跑起来,你需要准备好以下几个环节。我会把每个环节里容易踩的坑都点明。

3.1 基础环境准备:手机与Auto.js Pro

首先,你需要一部Android手机(很遗憾,iOS由于系统封闭性,无法使用此方案)。然后,关键的一步是安装Auto.js的执行环境。这里有个重要提示:原版的Auto.js在各大应用商店已经很难找到,且已停止维护。目前社区活跃的是一个分支版本,常被称为Auto.js Pro或类似变体。你需要通过项目的GitHub页面或可信的第三方渠道获取安装包。

安装完成后,打开Auto.js Pro,第一件事就是授予它无障碍服务权限。路径通常是:手机设置 -> 无障碍 -> 已下载的服务 -> 找到Auto.js并开启。同时,你还需要授予它悬浮窗权限后台弹出界面权限,这样才能方便地启动和停止脚本。

注意:不同手机品牌(小米、华为、OPPO等)对权限的管理策略和命名可能不同。如果遇到脚本无法正常运行,首先检查这三大权限(无障碍、悬浮窗、后台弹出)是否全部授予。特别是国产手机的省电优化和后台管理,很可能会杀掉Auto.js的后台进程,需要在手机管家里将其设为“允许后台活动”或“忽略电池优化”。

3.2 获取与部署Alipay AutoJS脚本

Alipay AutoJS本身不是一个App,而是一个脚本仓库。你通常需要在GitHub或Gitee等代码托管平台上搜索“Alipay AutoJS”或类似关键词,找到开源项目。项目里会包含很多.js后缀的脚本文件。

部署步骤一般如下:

  1. 在手机存储中,找到Auto.js Pro指定的脚本目录(通常是/sdcard/脚本/)。
  2. 将下载的.js脚本文件复制到这个目录。
  3. 打开Auto.js Pro,在主界面就能看到这些脚本了。

点击脚本名称可以预览代码,点击运行按钮(一个三角形图标)即可执行。建议第一次运行时,打开Auto.js的“日志”功能,这样可以看到脚本执行的详细过程,方便排查问题。

3.3 你的第一个自动化脚本:支付宝蚂蚁森林收能量

我们以一个最简单的场景为例:自动收取蚂蚁森林能量。这个脚本逻辑清晰,非常适合理解自动化流程。

一个基础版的收能量脚本思路如下:

// 收能量脚本示例 (简化版,实际脚本更复杂) auto.waitFor(); launchApp("支付宝"); sleep(5000); // 通过多次滑动,尝试找到“蚂蚁森林”入口 // 实际脚本中,这里会有更智能的查找逻辑,可能通过搜索或识别图标 swipe(device.width / 2, device.height * 0.8, device.width / 2, device.height * 0.2, 500); sleep(1000); if (text("蚂蚁森林").findOne(2000)) { text("蚂蚁森林").findOne().click(); } else { // 另一种方式:通过支付宝首页的“更多”或搜索进入 // 此处省略... } sleep(3000); // 等待蚂蚁森林页面加载 // 核心:循环查找并点击可收取的能量球 // 能量球在屏幕上通常显示为带有“绿色能量”文字的控件 while (true) { let energy = textMatches(/.*能量.*/).findOne(1000); // 查找包含“能量”二字的控件 if (energy) { energy.click(); sleep(500); // 每次点击后稍作停顿 } else { // 没有找到更多能量,可能是收完了,或者需要滑动屏幕 swipe(device.width / 2, device.height * 0.7, device.width / 2, device.height * 0.3, 500); sleep(1000); // 再检查一次,如果还没有,可能就真的收完了 if (!textMatches(/.*能量.*/).findOne(500)) { toast("能量收取完成或未找到更多能量"); break; // 退出循环 } } }

这个脚本展示了几个关键点:

  • 等待与延迟sleep()函数至关重要。网络加载、界面渲染都需要时间,不给足延迟,脚本就会点空。
  • 控件查找text()textMatches()是常用的查找函数。更复杂的场景还会用到id()className()等。
  • 循环与退出条件:用while循环来反复尝试收取,并设置合理的退出条件,避免脚本死循环。
  • 容错处理:实际项目中,脚本会有更多的if判断和try-catch块,以应对界面突然变化、网络弹窗等意外情况。

实操心得:直接运行从网上下载的脚本,大概率不会一次成功。因为每个人的支付宝界面布局、手机分辨率、系统版本都不同。你需要学会“调试”。最实用的方法是使用Auto.js Pro提供的“布局范围分析”功能。运行这个功能,点击屏幕上的元素(如“收取”按钮),它会显示出这个控件的所有识别信息(文本、ID、类名)。用这些信息去修改脚本中的查找条件,才能让脚本在你的手机上精准定位。

4. 脚本的定制化与进阶技巧

能用别人的脚本是第一步,能修改和编写自己的脚本,才是真正释放自动化威力的关键。Alipay AutoJS项目提供的脚本,是最好的学习材料。

4.1 如何阅读和修改现有脚本

打开一个复杂的脚本,你可能会看到很多函数和变量。不要慌,按以下步骤分解:

  1. 找入口:通常脚本最下面有一个main()函数或直接执行的代码块,从这里开始看流程。
  2. 理解核心逻辑:忽略细节,先看它要完成什么任务(例如:依次访问“蚂蚁庄园”、“芭芭农场”、“运动”)。
  3. 识别界面操作:找到那些launchAppclickswipetext语句,它们对应了具体的操作步骤。
  4. 修改关键参数:最容易定制的是sleep的时间、查找的文本内容。比如,你觉得某个页面加载太慢,就把sleep(3000)改成sleep(5000)。如果某个按钮的文字在你的支付宝里不一样,就把text(“立即签到”)改成text(“去签到”)

4.2 编写健壮脚本的必备技巧

想要脚本稳定运行,少出毛病,下面这些技巧必不可少:

  • 显式等待代替固定等待:不要总是用sleep(3000)。更好的做法是使用waitFor()系列函数,等待特定控件出现。

    // 不佳的做法 click(“进入”); sleep(5000); // 死等5秒,可能浪费时间或不够 // 推荐的做法 click(“进入”); let success = text(“加载完成”).waitFor(); // 等待“加载完成”文字出现,最多等待10秒(默认) if (success) { // 继续下一步 } else { toast(“页面加载超时”); exit(); }
  • 多用findOne()timeout参数:在查找控件时,指定一个超时时间,避免找不到时脚本卡住。

    let btn = text(“领取”).findOne(5000); // 最多找5秒 if (btn) { btn.click(); } else { // 没找到,执行备用方案或记录日志 console.warn(“未找到领取按钮”); }
  • 引入随机性和人性化:过于规律的操作是自动化的一大特征。可以加入随机延迟和随机滑动,让行为更像真人。

    function randomSleep(min, max) { let time = random(min, max); // random是Auto.js内置函数 sleep(time); } // 使用 click(“按钮”); randomSleep(1000, 3000); // 等待1到3秒之间的一个随机时间
  • 做好日志记录:使用console.log()toast()记录脚本关键节点的执行情况。当脚本出错时,这些日志是唯一的排查线索。

4.3 应对支付宝界面变化:图像识别作为备选方案

纯文本和控件ID查找的方式,最大的弱点是依赖界面稳定性。一旦支付宝版本更新,按钮的文本或ID变了,脚本就失效了。这时,图像识别可以作为一个强大的补充方案。

Auto.js Pro通常集成了简单的图像识别功能(如findImage())。你可以事先截取目标按钮的图片,保存在手机里,然后让脚本去匹配。

// 假设你有一张“去浇水”按钮的截图,保存为 /sdcard/浇水.png let img = images.read(“/sdcard/浇水.png”); let point = findImage(captureScreen(), img); if (point) { click(point.x, point.y); // 点击匹配到的坐标 } else { console.error(“未找到浇水按钮图像”); }

图像识别的优点是抗文本变化能力强,缺点是速度较慢,且受屏幕亮度、分辨率影响较大。通常的策略是:优先使用控件查找,查找失败时再尝试图像识别作为降级方案

5. 安全边界与常见问题排查

使用任何自动化工具,安全和合规都是绕不开的话题。这里不涉及任何规则细节,只从技术实践角度谈谈边界和自救。

5.1 理解自动化行为的风险边界

自动化脚本模拟人工操作,但它毕竟是程序。需要注意以下几点:

  • 频率与节奏:避免在极短时间内进行高频操作(如每秒点击十几次),这不符合人类行为模式。
  • 行为模式:不要设计7x24小时不间断运行的脚本,加入合理的“休息时间”和随机间隔。
  • 数据访问:脚本只在屏幕层面操作,理论上不接触你的账号密码等敏感数据。但务必从官方或可信来源获取脚本,避免使用来路不明的、要求额外权限的脚本。

核心原则:自动化是用来提升效率、解放双手的,而不是用来进行任何不当行为的。请将它用于处理个人、重复、琐碎的任务。

5.2 高频问题与自救排查指南

脚本跑不起来?运行一半失败了?别急,按照这个排查链路一步步来:

  1. 第一步:检查权限

    • 症状:脚本一点反应都没有,或者提示“无障碍服务未开启”。
    • 解决:进入手机设置 -> 无障碍,确认Auto.js的服务已开启。并检查悬浮窗、后台弹出权限。
  2. 第二步:检查日志

    • 症状:脚本运行后瞬间停止,或卡在某处。
    • 解决:打开Auto.js的日志界面,这是最重要的调试工具。看最后报错的信息是什么。常见错误有:
      • TypeError: Cannot read property 'click' of null:意思是click()的对象是null,即没找到要点的控件。回到上一步的“布局分析”,确认控件查找条件是否正确。
      • 脚本执行超时:可能是某个waitFor一直没等到,检查等待的条件在当前界面是否存在。
  3. 第三步:模拟手动执行

    • 症状:日志显示找到了控件也点击了,但就是没效果。
    • 解决:关闭脚本,完全用手工走一遍流程。注意观察每一步之后,屏幕上的变化是否和脚本预期的一致。特别留意是否有弹窗(如网络提示、活动规则)打断了流程。好的脚本应该包含处理这些意外弹窗的逻辑。
  4. 第四步:适配你的设备

    • 症状:别人的脚本好用,自己用就不行。
    • 解决:分辨率不同是最常见的原因。脚本中的坐标点击click(x, y)在分辨率不同的手机上会点错位置。尽量避免使用绝对坐标,改用基于控件的相对操作。如果脚本里用了图像识别,确保截图是在你自己的手机、当前主题下截取的。
  5. 第五步:应对应用更新

    • 症状:昨天还好好的,今天支付宝更新后脚本就失效了。
    • 解决:这是自动化脚本的常态。你需要重新分析新版本的界面,更新控件查找条件(文本、ID)。这就是为什么建议你将核心的控件信息(如关键按钮的文字)定义为变量放在脚本开头,以后只需修改这一个地方即可。

6. 超越支付宝:Auto.js的通用自动化潜力

虽然本项目聚焦于支付宝,但Auto.js的能力远不止于此。理解了它的原理后,你可以将自动化扩展到手机操作的方方面面。这就像是学会了一套“武功心法”,可以对付各种“对手”。

  • 跨应用协作:可以从微信读取验证码,然后自动填入支付宝;可以从钉钉打卡后,自动在记事本里记录。
  • 定时任务:利用Auto.js的定时器功能,让脚本在每天固定时间运行,实现真正的全自动。
  • 数据处理:结合OCR(光学字符识别)插件,可以识别截图中的文字信息,并自动整理到Excel或数据库中。
  • 游戏辅助:一些简单的重复性游戏操作(如收菜、刷初始号)也可以尝试(需注意游戏规则)。

要探索这些,你需要深入学习Auto.js的官方API文档,了解它提供的所有模块:设备、应用、界面、传感器、文件、网络等。从修改现成脚本,到为自己的独特需求编写脚本,这个过程充满挑战,也极具成就感。

我个人从使用Alipay AutoJS到现在,最大的体会是:自动化不是为了偷懒,而是为了把时间和精力从重复劳动中解放出来,投入到更值得的事情上。它要求你具备一种“程序员思维”——将模糊的手动流程,拆解成清晰、逻辑严密的步骤。这个过程本身,就是对逻辑能力和解决问题能力的一次极好锻炼。刚开始,你可能会花几个小时去调试一个几分钟就能手动完成的任务,看起来效率更低。但一旦脚本成功,它未来将为你节省无数个几分钟,这种一次投入、长期受益的体验,才是自动化的魅力所在。

← 返回列表