Auto.js安卓自动化脚本入门:安装、权限配置与首个脚本实战
我最早接触 Auto.js 是在一年多前当时被一批每天重复点击手机屏幕的机械动作折磨得够呛。后来发现这个叫 Auto.js 的安卓自动化脚本框架可以把我那些重复性的点击、滑动、输入操作直接用 JavaScript 写出来运行一次就自动跑完。从那之后Auto.js 就成了我处理手机重复操作的首选工具也陆续帮几个朋友写了一些自动化小脚本。这篇文章就来完整聊聊 Auto.js 是什么、怎么安装、怎么跑通第一个测试脚本以及我在实操中踩过的坑。不管你是完全没接触过的小白还是已经装过但总在“权限开启”“脚本报错”上卡住的半新手这篇文章应该都能对你有帮助。1. Auto.js 到底是什么为什么值得折腾1.1 它解决的痛点手机上的重复操作比电脑上更难忍因为手机上更没有“批处理”这回事。比如每天手动打开 App 签到、在多个表单里输入同样的内容、在设置页里来回切换开关又或者是给群里的好友逐个发送通知、把相册里几百张照片按规则重命名或移动这些操作一旦多起来手动点一遍真的会怀疑人生。Auto.js 解决的就是这类问题。它运行在 Android 系统里通过系统的无障碍服务读取当前屏幕上的界面结构再按照你写的 JavaScript 脚本去模拟点击、滑动、输入文字、返回桌面等操作整个过程不需要 root也不需要电脑连着数据线。你把脚本文件放到手机里运行一次它就能把一套流程完整执行完。1.2 核心原理与能力边界Auto.js 的核心是“无障碍服务”。这个服务原本是 Android 给视觉障碍人群做的屏幕阅读辅助能力但它同时具备读取窗口内容和模拟全局操作的能力。Auto.js 恰恰把这两点组合起来一方面读取窗口的控件树知道屏幕上哪个按钮在哪个位置、文本是什么另一方面调用 dispatchGesture 等接口模拟真实手势于是就能“看见屏幕”并“操作屏幕”。这意味着它和传统的按键精灵类工具完全不同它不只是死板地按坐标点击而是可以像人一样“找按钮”——按文本、按 id、按控件类型去定位一个按钮再点击。界面一旦变化只要控件特征还在脚本就能继续工作这是它最强大的一点。不过也要说清楚它有明显的边界它是在 Android 原生控件层面工作的。如果页面是 H5、小程序或游戏里的 Canvas 绘制内容很多控件信息读取不到这时候就得退回坐标点击的方式。无障碍服务不是万能的某些高版本系统或加固后的 App 会隐藏控件信息或者把界面绘制在非标准图层里。它做的是“模拟操作”不是“修改系统内部状态”。所以凡是需要突破应用权限的操作比如改系统设置、读另一个 App 的私有数据它同样做不到。1.3 版本怎么选别装错版本选版本这事特别容易踩坑。我最早搜到 Auto.js下载了一个所谓“破解版”结果安装包被手机安全中心直接拦下来后来才知道是别人打包的修改版根本不敢用。老实说Auto.js 的官方原版已经停止更新但它在 GitHub 上仍然可以下载而且核心功能在大部分 Android 7.0 到 Android 13 的设备上人都能正常用。目前你能接触到的版本基本上有这几类版本来源是否免费适不适合普通用户Auto.js 4.1.1 Alpha2原版开源GitHub Releases免费适合学习练手和日常自动化Auto.js Pro官方销售渠道付费功能更全适合做专业项目各种社区修改版/增强版各种网盘、群分享不明不推荐有隐私风险我个人建议第一步就用原版开源的 4.1.1 版本功能和稳定性足够你跑通日常自动化。如果在高版本 Android 上遇到兼容性问题再考虑 Pro 版。千万不要用来历不明的修改版因为自动化脚本本身就有读取屏幕内容的权限把这种权限交给不明来源的安装包风险实在太大。2. 完整安装流程从下载到打开无障碍服务2.1 下载前要确认的环境条件安装之前先检查一下手机如果你的 Android 版本在 7.0 以下不建议折腾 Auto.js 了很多 API 不支持如果版本是 Android 13、14甚至是某些国产定制系统要额外注意无障碍服务会不会被系统省电策略杀掉。这个我后面会专门讲。另外要提醒一下Auto.js 是给 Android 手机用的iOS 用户可以直接退出这篇文章了。下载方式比较简单用手机浏览器访问 GitHub 上的 Auto.js 仓库 Releases 页面找 4.1.1 版本对应的 APK 文件下载就行。有些地区访问 GitHub 比较慢也可以用你信任的镜像站但下载之后务必比对一下安装包签名和大小避免下载到被二次打包的文件。我第一次下载就吃过亏装了一个修改版里面除了脚本之外似乎还带了一些灰色 SDK虽然没出什么大事但想想都后怕。2.2 安装 APK 时常见卡点APK 下载好之后很多新手第一步就卡住了因为 Android 系统默认禁止安装来自“未知来源”的应用。手机会弹一个提示告诉你“为了安全您的手机目前不允许安装来自此来源的应用”你需要去设置里允许浏览器或文件管理器安装应用。这一步每个手机略有不同但大方向是一样的点击刚才的 APK 文件。系统弹出拦截提示时选“设置”或“更多详情”。找到“允许来自此来源的应用”开关打开它。返回再点一次 APK就能正常安装了。我见过不少人在这一步反复安装失败其实不是 APK 的问题就是没找到“允许安装未知应用”的开关。国产手机还容易加一道“智能拦截”或者“安全检测”如果被拦截了通常在拦截页面可以直接选择“继续安装”。2.3 打开无障碍服务和悬浮窗权限安装完成后第一次打开 Auto.js 主界面它会提示需要开启几个权限。核心权限有两个无障碍服务和悬浮窗权限。无障碍服务的开启路径是系统设置 → 无障碍/辅助功能 → 已安装的服务 → Auto.js → 打开开关。注意有些手机把无障碍服务藏在“更多设置”或者“已下载的服务”里得耐心找一找。开启后系统会弹一个比较长的说明框大概意思是“这个服务可以监控你的操作并执行手势”正常点确定就行。悬浮窗权限的开启路径是系统设置 → 应用设置 → Auto.js → 显示悬浮窗/悬浮窗权限把它打开。这个权限负责的是 Auto.js 运行脚本时我们会在屏幕上看到的那个小悬浮窗它不仅能显示日志还能在需要时快速停止脚本。存储权限也建议顺手开一下这个权限一般是在安装后首次打开 App 时就会弹出来用于读取和保存脚本文件。不开的话后面导入 js 文件或者保存截图都会出问题。权限阶段最关键的一点是如果打开无障碍开关之后它马上又自动跳回去了说明系统没有真正允许。这时候不要反复重开应该去设置里看看有没有“受限设置”之类的拦截记录把 Auto.js 加入允许列表再重新打开一次。2.4 国产手机需要额外处理的设置如果你用的是小米、华为、OPPO、vivo 这类国产手机光开无障碍服务还不够系统很可能在几分钟后就把 Auto.js 的后台进程清理掉导致脚本跑着跑着就“没了声音”。这时候你要做的是一套标准的“后台保护”操作到系统设置里的应用管理找到 Auto.js手动设为“允许自启动”很多手机在应用信息页就能直接看到“自启动”开关。找到“电池优化/省电策略”把 Auto.js 设为“不优化”或“无限制”避免系统在省电模式下自动冻结它。如果不确定哪些设置项没找对直接在系统设置的搜索框里搜“自启动”和“电池”通常能快速定位。这些操作听起来很麻烦但重要程度不亚于开无障碍服务。我第一次在 MIUI 上测试时脚本运行到一半就停了排查了半天才发现是系统在 2 分钟后把 Auto.js 干掉了。设置好自启动和电池策略之后问题立刻消失。3. 跑通第一个测试脚本直接上手3.1 先写一个 Hello World 级别的小脚本安装好之后别想着立刻写复杂脚本先把最简单的跑通验证环境没问题。打开 Auto.js点右下角的“”按钮新建一个脚本文件把下面这段代码粘贴进去然后保存。toast(Auto.js 安装成功第一个测试脚本跑通了); log(这是控制台日志);然后点“运行”你的手机屏幕上会在底部弹出一个深色的小气泡提示同时 Auto.js 的日志面板里出现一行“这是控制台日志”。如果这两件事都发生了恭喜你Auto.js 已经可以正常工作了。可能有人问这代码也太简单了吧没错测试脚本的目的不是完成任务而是确认三件事无障碍服务正常、脚本引擎正常、输出通道正常。如果 toast 弹不出来优先检查无障碍服务是不是真的开着如果 toast 能弹但日志看不到右上角日志窗口被关了打开就行。3.2 能“看到”屏幕才能操作屏幕Hello World 之后真正重头戏来了。Auto.js 之所以比坐标脚本好用就是因为它能读取屏幕上的控件信息。要验证这一点在脚本里再加上一小段代码让它把当前页面的控件树打出来。auto.waitFor(); var currentPackage currentPackage(); var currentActivity currentActivity(); log(当前应用包名: currentPackage); log(当前界面: currentActivity); var nodes className(android.widget.Button).find(); log(当前界面共有按钮: nodes.size() 个);运行这段脚本时你应该随便停留在某个 App 的页面上比如系统设置页。它会输出当前哪个应用在前台、哪个 Activity 在展示以及页面上有多少个 Button 控件。看到这些输出说明 Auto.js 已经能“看到”你的屏幕了。这里有个细节auto.waitFor()的作用是等待无障碍服务就绪。如果你刚开机、还没解锁或者服务被系统杀掉脚本一开始就调用控件查找时会报错加上这一句可以在服务就绪前阻塞等待是写脚本的第一行标配。3.3 用一个自动打卡场景串联所有基础能力学到这里可以试着把点击、延时、输入、滑动这些能力组合起来。我举一个生活中每个人都可能遇到的例子自动在某个学习或办公类 App 里完成每日打卡签到。你不需要照抄这个代码但可以理解它然后改造成适合自己的流程。auto.waitFor(); // 打开目标 App这里以“设置”为例方便在任意手机上复现 launchApp(设置); sleep(2000); // 通过文本找到入口并点击 var entry text(WLAN).findOnce(); if (entry) { entry.click(); log(已进入 WLAN 设置页面); } else { log(没有找到 WLAN 入口); } sleep(1500); // 执行返回操作 back(); sleep(500); // 触发一次滑动 swipe(device.width / 2, device.height * 0.7, device.width / 2, device.height * 0.3, 500); log(脚本执行完毕);这段代码做了几件事按名字打开“设置”应用、等待页面加载、按文本找到“WLAN”入口并点击、返回、再做一个从上往下的滑动。你把它跑一遍能明显看到手机像有人在远程操作一样自己动起来。在执行过程中Auto.js 会在屏幕上出现一个悬浮窗显示当前脚本运行状态。如果点错了想立刻停下来只需要按音量键或者在悬浮窗上点“停止”这一点在调试阶段特别重要。3.4 从“能跑”到“跑得稳”的进阶习惯第一个脚本跑通之后别急着写大脚本先建立几个习惯每行操作之间尽量保留足够的sleep()。页面加载有延迟太快点击下一个控件容易找不到目标。我一般会在点击后预留 500 到 2000 毫秒不等关键步骤甚至可以更长。查找控件时优先用text()和id()实在不行才用坐标。因为控件方式自动适配分辨率坐标方式换一台屏幕大小不同的手机就要重新调。写日志是一个好习惯。每做一步就log()一条出问题时能直接看日志定位到卡在哪一步。这些习惯看起来不起眼但可以帮你省下大量调试时间。我见过很多新手脚本写得很长却没有一个日志输出最后跑挂了都不知道卡在哪一行只能一行行注释排查。4. 常见问题与排查技巧实录4.1 无障碍服务总是不生效怎么办我听过最多的报错就是“脚本里一调用控件方法就报错说没开启无障碍服务”但明明去设置里看开关是开着的。这种情况八成有两个原因第一个原因是开关确实开着但服务被系统限制没有真正“绑定”。国产手机里常见于用户开了开关但系统在“最近任务”里把 Auto.js 划掉了服务随之被解绑。解决办法是重新打开 Auto.js再到无障碍设置里关闭服务再重新打开一次。第二个原因是脚本运行时服务没有完全就绪。刚开完服务立刻运行一个复杂的脚本有概率报错。我习惯在脚本第一行加auto.waitFor()如果它长时间等待说明服务还没就绪而不是脚本有问题。还有一个小技巧在 Auto.js 主界面“设置”里有一个“无障碍服务状态”显示。如果显示正常就不用纠结系统设置里的开关状态了。4.2 点击控件没反应先别怀疑脚本很多新手以为 click 没反应就是代码写错了但其实有几种很隐蔽的情况。一是控件确实找到了但它的 click 位置不对。部分自定义控件点击区域很小或者被悬浮窗遮挡。这个时候可以尝试entry.click()失败后用bounds()拿到控件坐标再手动点击一次var entry text(WLAN).findOnce(); if (entry) { var b entry.bounds(); click(b.centerX(), b.centerY()); }二是控件是“假的”。现在很多 App 用 Flutter、RN 之类的跨端框架界面元素不是原生控件Auto.js 能找到的控件树非常稀疏甚至找不到。这种情况无法靠控件定位只能用坐标或图像识别兜底。三是点击事件被系统拦截了。比如你开了悬浮球、侧边栏之类的 App可能会抢走手势事件把这类 App 暂时关闭再试。4.3 毛玻璃、WebView 和混合界面怎么定位现在很多应用把部分页面改成 WebView 渲染页面里的按钮在原生控件树里根本不存在。遇到这种页面我的思路是优先看页面整体能不能用textContains或desc定位如果还不行就用 UIAutomator 的工具看看再不行就只能做图像匹配。Auto.js 里有一个images模块可以做简单的图像识别比如找一张截图里的某个图标requestScreenCapture(); var img captureScreen(); var p findImage(img, images.read(/sdcard/脚本/按钮.png)); if (p) { click(p.x 20, p.y 20); }这个方法对图片素材要求很高和当前屏幕的分辨率、明暗、缩放都要基本一致才行否则容易找不到或找错。图像识别可以作为兜底但不要把它当成首选方案。4.4 运行一段时间后脚本自动停掉最典型的场景是脚本晚上定时运行第二天早上发现根本没跑完或者跑了一半停了。我排查下来原因基本集中在系统后台回收和定时任务的“精确性”设置上。系统后台回收前面说的“自启动电池策略”没设置好Auto.js 进程被系统杀掉。确认方法很简单脚本运行中途手动划到桌面等几分钟再切回来看脚本是否还在运行。如果没了就是后台被回收。定时任务不精确用setTimeout和setInterval做定时任务手机休眠后可能被系统冻结导致延迟甚至不触发。要保证脚本在指定时间执行优先使用 Auto.js 自带的“定时任务”功能同时还要把系统的“休眠时保持 Wi-Fi 连接”这类设置一并处理。如果你要用 Auto.js 做长期无人值守的自动化任务建议给它配一台专门的旧手机把通知全部关掉省电模式关掉屏幕保持充电常亮这样踩坑的几率会小很多。4.5 常见问题速查表为了查阅方便我把经常遇到的问题整理成一个表现象通常原因处理思路安装被拦截未允许安装未知应用到应用管理里打开“允许安装其他应用”脚本一调用控件就报错无障碍服务未生效使用 auto.waitFor()并重新开关服务toast 和 log 都没有引擎或悬浮窗权限问题检查悬浮窗权限、重启 Auto.js能运行但点不中按钮控件点击区域异常用 bounds() 中心点或坐标点击找不到页面元素WebView/H5/Canvas改用坐标或图像识别兜底脚本跑一半停掉系统后台回收进程设置自启动、忽略电池优化定时任务不触发系统休眠冻结任务用 Auto.js 定时任务并调整休眠策略升级系统后无障碍失效系统策略变更重置 Auto.js 并重新授权写在最后的实操心得如果只让我给一条经验那就是先把权限这一关彻底打通再写脚本。很多人一上来就急着抄网上一段代码最后卡在权限上误以为代码有问题其实环境都没准备好。另外脚本不在多而在稳。我自己日常真正长期在用的脚本并不多反而是那些写完之后在多个场景、多台手机上反复跑过的脚本最让我放心。调试阶段尽量多打日志不要怕慢一个步骤一个步骤确认比一次写完整段然后全盘找 bug 要高效得多。Auto.js 能做的事情远远不止签到打卡。你可以用它整理文件、批量重命名照片、自动填写表单、做简单的手机自动巡检甚至给家里长辈写一个“一键调大字体并打开手电筒”的小脚本这些都是在合理范围内提升效率的用法。但要注意任何自动化脚本都应该用于正规、合法的场景不要拿它去做绕过 App 限制、刷量或恶意操作的事情这不只是工具使用的问题也关系到账号安全和合规风险。希望这篇文章能帮你把 Auto.js 从“听说过”变成“跑起来”。装好之后随便写两行 toast 测试一下那种“手机替自己干活”的感觉真的很奇妙。接下来你想让它先帮你完成什么重复劳动那就是你自己发挥想象力的时候了。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →