免 root 怎么分工
早期脚本大多先拿 root。用 su 拿到最高权限,再靠 Xposed 或直接改系统文件。这条路现在还能走。代价是失去保修、安全风险更高、系统升级后兼容差。有的 App 会检测 root,甚至拒绝运行。
现在日常用的是系统自己开放的接口。无障碍服务(AccessibilityService)读界面节点,注入点击和输入。ADB 做安装、设置、文件操作这些系统指令。两条都不改系统,也不走 root 检测。部署、兼容和合规成本都更低。要决定的是无障碍和 ADB 怎么搭配。
| 维度 | 无障碍服务(Accessibility) | ADB |
|---|---|---|
| 官方性 | 系统官方 API | 系统官方工具 |
| 核心能力 | 模拟点击/滑动/输入、读取界面元素 | 安装应用、文件操作、系统指令 |
| 定位方式 | 按控件 id / 文本 / 描述 / 坐标 | 坐标级指令(input tap/swipe) |
| 适用场景 | App 内操作、业务脚本 | 设备初始化、批量管理 |
| 权限要求 | 用户手动开启无障碍授权 | 开启 USB 调试并授权电脑 |
| 稳定性 | 依赖界面元素稳定性 | 指令级稳定 |
| 运行环境 | 设备本地常驻服务 | 需要电脑或调试通道连接 |
两条路线看的层级不一样。无障碍跑在系统进程之上,拿到的是界面语义:每个按钮的 id、文本、描述、位置、能不能点。脚本可以按名字找按钮。ADB 在系统指令层,不看界面长什么样,只看装没装应用、开了什么权限、当前在哪一屏。常用搭配是:ADB 负责进门前的事,装应用、开权限、设网络、截屏留档;无障碍脚本负责进门后的业务点击。一台裸机到能跑业务,顺序一般是 ADB 批量安装,批量授权,启动无障碍,脚本跑业务,再由 ADB 把结果收回来。
运行形态也不一样。无障碍常驻在手机上,断开电脑也能跑,适合设备自己执行。ADB 依赖电脑和手机之间的调试通道,适合电脑统一发令。手机要离线自己跑,用无障碍。任务都从一台电脑发起,先用 ADB 拉起,再交给无障碍执行,会更好控。
无障碍服务怎么跑稳
无障碍自动化拆成三步。服务打开之后,系统在界面跳转、内容变化时推事件,脚本靠这个知道当前在哪一页。接着读控件树,AccessibilityNodeInfo 里有当前页能点的元素:id、文本、描述、包名、可点击属性。最后对目标节点注入点击、长按、滑动或输入。
在 EasyClick 中控里能看到每步操作的详细日志:当前页面状态、找到的控件 ID、注入的操作类型和结果;某一步失败,日志精确到秒级记录原因,不需要逐台翻手机看屏幕。
稳不稳,先看怎么定位。优先顺序是控件 id,然后文本,然后描述,坐标放最后。id 最稳,版本升级仍可能变。文本直观,重复时要加索引。描述适合图标按钮。坐标是兜底,布局一变就可能点空。页面有动画和网络延迟,节点经常比画面晚出来,要等元素出现:轮询节点树,直到可点击或超时。固定 sleep 盖不住这个间隔。有的厂商在内存紧的时候会关掉无障碍服务,脚本里要做存活检测,挂了就拉起来。
锁屏之后,无障碍能做的事会少一截。有的系统允许锁屏后继续注入,厂商策略并不统一。要熄屏跑的任务,先在真机上试,并把唤醒屏幕写进脚本。无障碍事件是异步推上来的,元素从出现到能点,中间常有几百毫秒到几秒。引擎会在事件回调上再轮询节点是否就绪,避免空点。录出来的脚本能跑、却不稳,多半卡在这里。
ADB 管的是界面之外的事
ADB 绕过界面,直接下系统指令。它补的是无障碍做不到的事:
| 命令类别 | 常用指令 | 典型场景 |
|---|---|---|
| 安装/卸载 | adb install、adb uninstall | 批量装应用、环境重置 |
| 权限管理 | adb shell pm grant/revoke | 批量授予运行时权限 |
| 应用控制 | adb shell am start/force-stop | 启动/关闭指定应用 |
| 输入指令 | adb shell input tap/swipe/text | 坐标点击、滑动、输入 |
| 截图取证 | adb exec-out screencap | 运行结果留档 |
| 文件传输 | adb push/pull | 下发脚本、回收数据 |
| 连接管理 | adb devices、adb connect | 多设备状态检查 |
批量初始化一台设备,顺序是:打开开发者选项和 USB 调试,数据线连上电脑并授权,确认 adb devices 能看到,批量安装,批量授权,启动无障碍,先下一条测试指令确认通道,再批量跑脚本。几十台循环这一套,就是批量初始化能收口的最小流程。授权是一次性的,换电脑、换端口、系统重置之后都要重新点。批量场景要巡检连接状态。input 指令按坐标走,替代不了无障碍按控件找。无线调试(adb tcpip)可以不插线,设备和电脑必须在同一网络,而且网络要稳。IP 变了要重新 adb connect。批量用之前先固定 IP,或者让中控维护连接清单。
能做什么不能做,怎么选型落地
免 root 能覆盖的,是批量点击、滑动、输入,再配 OCR 处理读不到的控件;读界面元素,做条件判断、循环、重试和分支;批量装应用、开权限、改设备参数;定时、无人值守、失败告警;再配合群控或中控,管几十上百台。要 root 才能做的,是改系统文件(hosts、系统应用、开机自启项)、内核级操作和深度 Hook,以及部分强反自动化 App 的深层绕过。后面这些不建议做,也不合规。应用内交互和常规系统操作,免 root 都够。改系统文件、动内核,才要考虑 root。绝大多数业务自动化属于前面那类。
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| 日常业务脚本、App 内操作 | 免 root(无障碍) | 语义定位稳定,适合长通道操作 |
| 设备批量初始化 | 免 root(ADB) | 指令稳定、可批量、快 |
| 自动化测试 | 免 root(真机测试) | 真机环境更真实,无需刷机 |
| 系统级魔改 | 才考虑 root | 不推荐,风险和合规成本高 |
落地按五步走。先定一个高频、步骤固定、风险低的流程。准备测试机,打开开发者选项和 USB 调试,完成授权。用一条最简单的指令,比如启动某个应用,确认两条通道都通。写脚本时优先按控件定位,并留下等待元素、重试和截图。单机跑通之后,再接中控或群控,做批量下发和结果回收。
稳不稳,看定位方式和有没有等待、重试,跟有没有 root 关系不大。root 了却全写坐标,布局一变照样碎。绝大多数业务用不到改系统文件,免 root 就够。无障碍是官方 API。风险主要来自用途,灰产换任何方案都危险,也来自 App 自己的反自动化策略。坐标最容易失效,分辨率、布局、弹窗都能让它点空。锁屏后能不能继续注入,要看厂商,需要熄屏跑就先在真机上验证。
关于 EasyClick:手机自动化脚本开发平台,覆盖安卓免 ROOT、iOS 免越狱、鸿蒙三大手机生态,还提供苹果脚本编写、苹果群控、安卓群控、远程云控、AI 群控手机等。→ 了解全部产品
想要真实跑起来?
本文介绍的方案均可基于 EasyClick 能力在 iEasyClick 落地。官网提供完整文档、开发工具与自动化产品,免费体验。