Hamibot 脚本闪退或运行异常排查
快速定位思路
脚本异常时,最快的方法是打开 Hamibot App 右上角的日志图标,查看实时输出。日志里会有明确的错误信息,比盲猜高效得多。
常见异常与解法
运行后很快提示「运行结束」
最可能的原因:权限没开。脚本需要无障碍服务和后台弹窗权限,没开的话脚本报错退出。
- 检查「权限清单」里的三项权限
- 特别确认无障碍服务是否还活着(经常被系统杀)
运行后没反应也没报错
可能的原因:
- 脚本正在加载中——Hamibot 脚本首次加载可能需要数秒到数十秒,给它点时间
- 远程调试看设备当前界面——脚本可能已经启动了但卡在等待某个控件出现
脚本报控件找不到
Error: NoSuchElementException: 找不到匹配的控件
原因:脚本的选择器匹配不到目标控件。常见场景:
- APP 版本升级了,控件的 id / text 变了
- APP 界面结构改了
- 脚本作者写死了某个版本的控件属性
解决:
- 远程调试打开控件树,确认当前屏幕上目标控件的真实属性
- 联系脚本作者看有没有新版本
- 如果是自己写的脚本,调整选择器匹配方式(优先用
id(),其次text(),最后className())
脚本运行到一半卡住
可能的原因:
| 现象 | 排查方向 |
|---|---|
| 固定卡住(完全不动) | 脚本在 findOne() 等待一个永远不会出现的控件,或网络请求超时 |
| 慢慢变卡 | 手机内存不够,有其他 App 在抢资源 |
| 随机卡住 | APP 本身在加载,脚本太快了需要加 sleep() |
快速处理:控制台手动停止 → 重新运行。如果反复卡住,需要修改脚本逻辑。
脚本报权限异常
Error: 需要屏幕截图权限
Error: 需要无障碍服务
在脚本开头加上权限检查,没权限时提示用户开启:
auto.waitFor(); // 等待无障碍
if (!requestScreenCapture()) {
toastLog('请授予屏幕截图权限');
hamibot.exit();
}
日志的正确用法
实时日志 vs 历史日志
- 实时日志:Hamibot App 右上角图标,实时滚动输出
- 历史日志:控制台设备详情页,可以回溯过去的运行
日志里找什么
- Error / Exception:开头带 Error 的行
- Exit:脚本主动或被动退出的标记
- Permission:权限相关的提示
- 控件 ID:找不到控件时日志里会打印尝试匹配的选择器
还是解决不了
Hamibot 控制台可以创建脚本工单——在控制台设备详情页找到工单入口,把截图 + 日志 + 设备信息一起发给平台或脚本作者,回复效率更高。