老柯修机铺

通讯行老师傅的手机软件笔记——每款 App 装过、用过,才敢写下来

AutoJs6 用了大半年,从写第一个脚本到现在的心里话

项目内容
软件AutoJs6
版本6.5.0
平台Android APK
体积68.28M
分类系统工具
包名org.autojs.autojs6
官网AutoJs6 官网
下载一AutoJs6 下载,AutoJs6 下载
下载二AutoJs6 下载,AutoJs6 下载
文档AutoJs6 文档
介绍从当初图新鲜装上 AutoJs6 到现在每天都离不开,聊聊这款安卓自动化工具在长期使用中的真实感受、踩过的坑和舍不得卸载的理由

先说说 AutoJs6 是什么

AutoJs6 是一款跑在安卓手机上的 JavaScript 脚本自动化工具。简单说,就是用代码让手机自己帮你干活——自动点按钮、自动填表单、定时运行某个操作。它的核心依赖是安卓的无障碍服务,能读取屏幕上的控件树,然后模拟点击和输入。

我接触自动化工具其实不算晚,Tasker 早就在用了。但 Tasker 的规则逻辑有时候写起来绕得慌,条件嵌套深了自己后来都看不懂。AutoJs6 不一样,它是正经的 JavaScript,写起来更接近日常编程的感觉,变量、函数、循环、条件判断这些都顺理成章。对有一点编程基础的人来说,上手门槛比 Tasker 的图形化规则低太多了。

AutoJs6 应用图标

AutoJs6 横幅介绍

当初为什么装上它

说白了就是想偷懒。

那阵子手机上装了好几个需要每日签到的应用,微博、知乎、百度贴吧,还有几个薅羊毛的小软件。每天睡前挨个打开点一遍签到按钮,机械重复到自己都嫌烦。Tasker 虽然能做,但配置一个新的签到规则得折腾好一会儿,换个应用又要从头来。

AutoJs6 让我看到了另一种可能:写一段通用脚本,找到页面上那个"签到"按钮就点一下。不管哪个应用,只要界面上出现这个文字,脚本就能识别。而且 JavaScript 灵活,遇到找不到按钮的情况还能加个兜底逻辑——比如等几秒重新找,或者截图用图像识别定位。

说实话,第一次装上的时候没抱太大期望。以前也试过类似的自动化工具,不是卡得要死就是根本识别不准。但 AutoJs6 的体验确实超出预期,脚本跑起来响应很快,控件定位也精准,不像某些竞品经常找错按钮。

越用越顺手的地方

最大的感受是控件定位真的很扎实。AutoJs6 能读取安卓的整个控件树,每个按钮、每个输入框都有自己的属性——id、text、desc,还有坐标范围。用 id() 定位最稳,可惜不是所有应用都给控件设了 id。退而求其次用 text() 或者 desc() 也够用,图标按钮通常只有 desc 没有文字,这时候 desc("返回") 这种写法就特别好用。

写脚本的过程本身也很舒服。Rhino 引擎虽然不是完整的浏览器环境,但 ES6 的 let/const、箭头函数、模板字符串这些常用特性都支持。我习惯用 let 和 const 声明变量,箭头函数写回调也比老式 function 表达式简洁不少。唯一要注意的是没有 async/await,异步操作得老老实实写回调或者用 Promise 链。

还有一个逐渐离不开的功能是定时任务。以前写好的脚本手动点运行,总觉得忘了。AutoJs6 可以直接在应用里设置定时执行——每天早上八点跑一遍全应用签到脚本,充电的时候自动清理后台,到达某个 Wi-Fi 就触发一段流程。配合 Tasker 用更是如虎添翼,Tasker 负责判断条件(时间、位置、应用状态),AutoJs6 负责执行具体的 JavaScript 操作,两者分工明确。

AutoJs6 功能介绍

越用越烦的地方

无障碍服务是绕不开的痛点。安卓系统对无障碍服务的限制越来越多,后台被杀的情况时有发生。有时候脚本跑得好好的,过了一天突然发现定时任务没触发,打开 AutoJs6 一看,无障碍服务被系统关了。这种情况尤其常见于国内厂商的定制系统,小米的 MIUI、华为的 EMUI 都有各种电池优化和后台限制,需要手动把 AutoJs6 加到电池白名单里,还要锁定后台。

另一个头疼的问题是WebView 内控件无法定位。很多应用的界面其实是用 H5 写的,外层包了一层 WebView。AutoJs6 的无障碍服务只能看到一个整体的 WebView 控件,里面的按钮和表单根本读不到。这时候只能退而求其次用坐标点击,但不同分辨率的手机坐标不一样,换台手机脚本就失效了。图像识别倒是能解决这个问题,但截图和找图的速度比控件定位慢太多。

还有就是列表控件的动态复用。RecyclerView 这种列表滚动后,子控件会被回收再利用,你之前拿到的控件引用可能已经指向另一个条目了。我早期写的脚本经常因为这个崩掉——找到第一个商品项之后,滚动一下想继续找下一个,结果拿到的还是那个旧的引用。后来才明白,每次滚动之后都要重新查找,不能缓存控件对象。

每天离不开的功能,和碰都没再碰的

每天必用的是浮动按钮。AutoJs6 可以在屏幕上叠加一个悬浮球,点一下就能触发预设的脚本组合。我把几个常用操作绑在上面:一键清理后台、快速截屏、打开夜间模式。不用每次都切到 AutoJs6 应用里手动跑脚本,浮球一点就完事了。

几乎没碰过的是 UI 脚本开发。AutoJs6 支持用 E4X 语法写自定义界面,可以做出带按钮、输入框、开关的完整应用界面。但说实话,我用 AutoJs6 主要是让手机自己干活,写界面反而增加了复杂度。真需要交互的时候,弹个 toast 提示一下就够了,犯不上再写一套布局。

长期使用后的观感修正

刚开始用的时候高估了它的"万能性",以为写个脚本就能搞定一切。后来慢慢明白,AutoJs6 本质上还是在安卓系统的限制下运行的——系统权限给多少,它才能做多少。一些需要 Root 的操作(比如强制停止应用、修改系统设置)没 Root 就做不了。还有某些应用会检测自动化工具,检测到有无障碍服务在运行就拒绝操作,这种情况 AutoJs6 也没办法。

反过来,也低估了它的稳定性。Rhino 引擎虽然不是 Node.js,但日常用到的 JavaScript 特性都覆盖到了。6.5.0 这个版本我从装上到现在没遇到过引擎崩溃或者语法不兼容的情况。相比起一些刚更新但 bug 一堆的新版本,这个经典版反而踏实。

去留结论

不会卸载,至少目前不会。

AutoJs6 已经成了我手机上的常驻应用,和 Tasker 配合构成了日常自动化的主力。那些每天要重复点的签到、清理、开关切换,全靠它帮我省下来。浮球的快捷操作也已经养成习惯,换手机的第一件事就是装回去。

如果说有什么信号会让我考虑换掉它,那就是无障碍服务被系统彻底禁止后台运行。现在还能靠电池白名单和锁后台勉强维持,但安卓新版本的限制确实在收紧。真到那时候,可能就得考虑其他方案了——或者干脆接受手动操作,毕竟工具再好用也只是工具。

但目前来看,AutoJs6 在安卓自动化这个细分领域里,还是我用下来最顺手的那一个。

本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

同类文章

Quicker:把重复点击缩成一个中键的效率工具

Quicker 不是又一款启动器,而是一套随叫随走的动作面板。本文用问答速查的形式讲清它是什么、怎么装、核心功能怎么用、和同类工具比有什么独特之处,以及值不值得装。