news 2026/5/19 12:37:19

安卓自动化实战 | 基于AutoX.js的无障碍脚本开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓自动化实战 | 基于AutoX.js的无障碍脚本开发

1. AutoX.js入门:零基础搭建自动化环境

第一次接触AutoX.js时,我也被它强大的功能震撼到了——不需要Root手机就能实现各种自动化操作,这简直就是懒人开发者的福音。下面我就带大家从零开始搭建开发环境,整个过程就像组装乐高积木一样简单有趣。

首先需要在手机端安装AutoX.js主程序。推荐直接到GitHub官方仓库下载最新Release版本,这个步骤和我们平时安装普通APP没有任何区别。安装完成后记得给应用开启悬浮窗权限和无障碍权限,这两个权限相当于AutoX.js的"眼睛"和"手指",没有它们脚本就无法识别界面元素和模拟操作。

电脑端我强烈推荐使用VS Code作为开发工具,配合官方插件体验最佳。安装插件后有个小技巧:按Ctrl+Shift+P调出命令面板,输入"AutoX.js"会看到几个关键命令。这里有个坑我踩过——如果使用数据线连接时VS Code没有显示"ADB: Tracking started",可能需要手动启动ADB服务。解决方法是到Android开发者网站下载ADB工具包,在终端运行adb start-server命令即可。

连接方式推荐无线调试,比数据线方便太多。确保手机和电脑在同一个WiFi下,在AutoX.js侧边菜单启用调试服务后,VS Code会显示一个二维码,用手机扫码就能建立连接。实测下来无线连接的稳定性相当不错,我在咖啡厅写脚本时延迟都能控制在200ms以内。

2. 控件识别:让脚本拥有"火眼金睛"

开发自动化脚本最关键的环节就是控件识别,这相当于给脚本安装了一双"眼睛"。AutoX.js提供了多种定位元素的方式,我常用的是基于属性和层级结构的组合定位法。

举个例子,要定位京东APP底部的"我的"标签,可以使用desc("我的").findOne()。这里的desc表示通过内容描述定位,类似HTML中的alt属性。但实际开发中经常会遇到控件没有描述信息的情况,这时就需要结合其他属性:

className("android.widget.TextView") .text("领券") .clickable(true) .findOne()

这个选择器就像CSS选择器一样精准,意思是:找到类名为TextView、文字内容为"领券"、且可点击的第一个元素。如果还是定位不到,可能需要检查控件所在的层级。Android的UI是树形结构,可以用depth()指定搜索深度:

className("android.widget.Button") .depth(10) .findOne()

我在实际项目中发现,很多电商APP的弹窗按钮都在较深的层级。有个实用技巧是开启AutoX.js的布局分析功能,它会用红色边框高亮当前匹配的控件,调试时特别直观。

3. 手势模拟:让脚本变成"灵活的双手"

控件定位成功后,接下来就要模拟用户操作了。AutoX.js支持所有常见的手势操作,但有些细节需要注意才能让脚本运行得更稳定。

最基本的click()操作就有三种用法:

  1. 直接点击控件对象:click(button)
  2. 通过坐标点击:click(100, 200)
  3. 点击控件区域:click(left, top, right, bottom)

在京东领券脚本中,我就用到了坐标点击来操作网页内嵌的元素。这里有个坑要注意:不同分辨率设备的坐标不一样,建议先获取控件bounds再计算相对位置:

let widget = desc("领取").findOne(); let bounds = widget.bounds(); click(bounds.centerX(), bounds.centerY());

滑动操作swipe()的参数更复杂些。除了起点终点坐标,第三个参数duration控制滑动时长(毫秒)。我测试发现300-500ms的滑动最接近真人操作,太快会被识别为机器行为。比如京东的横向滑动领券区:

swipe(900, 1200, 100, 1200, 400);

还有个高级技巧是使用gesture()实现多点触控。我曾经用这个功能模拟双指缩放地图,参数是个包含时间戳和坐标点的数组:

gesture(1000, [0, [500,1000], [500,1000]], [1, [500,800], [500,1200]]);

4. 实战开发:京东自动领券完整实现

现在我们把前面学的知识综合运用,开发一个真正的京东自动领券脚本。这个案例涵盖了APP启动、广告跳过、页面跳转、元素定位等完整流程。

首先要注意的是等待机制。网络加载需要时间,直接用sleep硬等待不靠谱。我推荐用waitFor()智能等待:

desc("我的").waitFor(); // 最多等待10秒 toast("首页加载完成");

处理开屏广告时要考虑两种情况:有广告时点击"跳过",没广告时继续执行。这种条件判断在自动化脚本中很常见:

if(desc("跳过").exists()){ click("跳过"); toast("跳过广告"); } else { toast("无广告"); }

进入PLUS会员页面后,领券区域通常是个横向滑动的列表。这里需要组合使用滑动和点击操作:

// 滑动到最左端 swipe(900, 1200, 100, 1200, 400); sleep(1000); // 点击第一个券 click(200, 1000); sleep(3000); // 领取 let receive = desc("立即领取").findOne(); click(receive);

最后别忘了异常处理。网络卡顿、元素不存在等情况都要考虑:

try { let coupon = desc("100元券").findOne(5000); click(coupon); } catch(e) { toast("未找到优惠券"); exit(); }

5. 调试技巧与性能优化

开发过程中难免会遇到各种问题,分享几个我总结的调试技巧。首先是日志输出,比toast更强大的是console.log(),信息会显示在VS Code的输出面板:

console.log("当前页面元素:", className("android.view.View").find());

对于复杂的界面,可以截图分析:

captureScreen("/sdcard/screenshot.png");

性能方面,大量查找控件会拖慢脚本速度。解决方案是启用控件缓存:

auto.waitFor("fast"); // 快速模式

还有个常见问题是内存泄漏。长时间运行的脚本应该定期清理缓存:

setInterval(() => { selectorCache.clear(); }, 60000);

我遇到过一个典型性能问题:在循环中不断查找同一个控件。优化方法是在循环外先获取控件:

// 错误写法 while(true){ let btn = text("确定").findOne(); click(btn); } // 正确写法 let btn = text("确定").findOne(); while(true){ click(btn); }

6. 进阶技巧:OCR与图像识别

当常规的控件定位失效时(比如游戏界面),可以考虑使用图像识别。AutoX.js内置了OpenCV支持,不过需要手动安装插件。

找图功能最基本的用法:

let img = images.read("/sdcard/template.png"); let point = findImage(captureScreen(), img); if(point){ click(point.x, point.y); }

更智能的方法是OCR文字识别。我做过一个自动阅读小说的脚本,核心代码如下:

let img = captureScreen(); let text = ocr.recognize(img); let page = text.match(/第\d+页/)[0]; console.log("当前页码:", page);

图像识别虽然强大但比较耗电,建议适当降低识别精度和频率。我通常设置500ms的间隔:

setInterval(() => { if(images.pixel(captureScreen(), 100, 200) == "#ff0000"){ click(100, 200); } }, 500);

7. 自动化脚本的部署与定时执行

脚本开发完成后,如何让它自动运行呢?AutoX.js提供了多种方案。

最简单的定时执行:

// 每天10点执行 timers.timedTask(10, 0, 0, () => { runScript("/sdcard/脚本.js"); });

更复杂的条件触发可以用广播监听。比如我做过一个自动抢红包的脚本,监听通知栏事件:

events.onNotification(notification => { if(notification.text.includes("红包")){ runScript("抢红包.js"); } });

对于需要长时间运行的脚本,要注意省电优化。我的经验是:

  1. 关闭不必要的日志
  2. 适当降低检测频率
  3. 使用设备管理员权限防止休眠
device.keepScreenOn(3600000); // 保持亮屏1小时

最后提醒下,正式部署前一定要在各种网络环境下测试。我曾在4G网络下发现脚本失效,原因是页面加载比WiFi慢很多,后来增加了动态等待时间才解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 12:33:03

Windows安卓设备连接终极指南:一键安装最新ADB驱动工具

Windows安卓设备连接终极指南:一键安装最新ADB驱动工具 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitcode.com/gh_mirrors/la/L…

作者头像 李华
网站建设 2026/5/19 12:30:33

IC设计五大典型Bug剖析:从CDC到软硬件协同的防御性设计

1. 项目概述:IC设计中的那些“老朋友”在芯片设计的江湖里混迹多年,我越来越觉得,我们这些IC工程师(ICer)的日常,与其说是在创造,不如说是在与各种层出不穷的“老朋友”——也就是bug——斗智斗…

作者头像 李华
网站建设 2026/5/19 12:30:03

如何快速掌握QuPath:面向研究者的数字病理图像分析终极指南

如何快速掌握QuPath:面向研究者的数字病理图像分析终极指南 【免费下载链接】qupath QuPath - Open-source bioimage analysis for research 项目地址: https://gitcode.com/gh_mirrors/qu/qupath QuPath是一款开源的生物图像分析软件,专为数字病…

作者头像 李华
网站建设 2026/5/19 12:27:01

单北斗GNSS变形监测系统是什么?主要有何应用与优势?

单北斗GNSS变形监测系统把北斗卫星的定位能力带进日常监测。它能实时获取位移信息,广泛运用于基础设施安监和地质灾害预警。依托卫星信号传输与专用数据处理,能实现厘米级定位,适合桥梁、隧道、水坝等重要设施。在实际使用中,这类…

作者头像 李华
网站建设 2026/5/19 12:25:51

联邦学习与去中心化智能体

联邦学习与去中心化智能体:构建数据孤岛时代的隐私优先协同计算生态一、引言 (Introduction) 1.1 钩子 (The Hook):数据孤岛是AI的“阿喀琉斯之踵”,还是人类隐私的“最后壁垒”? 想象一下这样的场景:202X年全球疫情反…

作者头像 李华