脚本运行失败排错指南——一步步定位为什么脚本不跑
排查流程
1. 检查无障碍服务状态(最常见)
if (auto.service == null) {
toast("无障碍服务未开启");
exit();
}
看侧拉菜单无障碍图标是不是绿的。是灰色的话跳到 无障碍服务 重开。
2. 检查脚本开头有没有 auto.waitFor()
缺少 auto.waitFor() 时,脚本可能在无障碍服务还没完全就绪时就开始执行操作,导致全部失败。推荐所有脚本第一行就是 auto.waitFor()。
3. 检查悬浮窗权限
脚本依赖悬浮窗(比如 floaty 模块、录制按钮)时,悬浮窗没开会导致相关 API 静默失败或抛异常。
4. 看日志面板
侧拉菜单 → 日志。红色是错误、黄色是警告、白色是正常输出。搜 "Error" 或 "Exception" 关键字定位问题行。
5. 简化脚本测试
如果你的长脚本跑不起来,先写一个最小测试:
auto.waitFor();
toast("如果看到这条提示说明基础配置没问题");
这个能跑 → 问题在你的业务代码这个跑不动 → 问题在权限 / 配置 / 安装
6. 环境问题排查
| 现象 | 可能原因 | 解决 |
|---|---|---|
| 脚本点按钮没反应 | 目标 APP 不暴露控件树 | 用坐标操作兜底 |
| toast 显示但操作没发生 | 无障碍服务卡住了 | 关闭再开启无障碍开关 |
| 脚本一运行就崩 | JS 语法错误 | 日志面板看具体哪行 |
| 打包后 APK 闪退 | 权限没齐 | 检查 config.json 权限声明 |
最常见的 5 个错误
错误一:控件找不到
text("签到").click(); // 抛异常:NoSuchElementException
→ 用 findOnce + if 判断,或加 waitFor 等待加载
错误二:无障碍服务意外断开
脚本跑一半突然停了 → 检查是否被系统杀、是否被省电模式限制
错误三:sleep 太长或太短
目标还没加载完就执行 → 改成 waitFor已经跑完还在 sleep 浪费时间 → 改短
错误四:坐标硬编码失效
换设备 / APP 更新后按钮位置变了 → 改用选择器
错误五:setTimeout / setInterval 不执行
脚本主线程结束后定时器会被清理 → 用 while 循环或 jobs 模块持久化