我用的是 Hamibot 1.7.1-beta 版本,在小米手机上运行 wla_daemon.js 脚本。
脚本里有 setInterval 循环,正常应该一直打印心跳日志,但现在每次运行,日志前缀都是随机 ID(比如 6a26b1f6...js),而不是脚本名 wla_daemon.js,脚本也只会运行一次就自动结束。
我已经尝试了:
从脚本列表直接点「运行」
新建同名脚本、删除旧脚本
设置定时任务(但版本里只有单次,没有循环)
开启了无障碍、前台服务、自启动、无限制省电策略
问题依旧,请问是什么原因导致脚本一直以临时 ID 运行,无法常驻?
回答
日志前缀显示随机 ID 是 Hamibot 的正常运行机制。系统在每次执行脚本时会生成独立的运行实例 ID,用于日志隔离、任务追踪和沙箱管理。这并不代表脚本运行异常,也不影响脚本功能。
脚本启动后立即提示“运行结束”,通常由以下原因导致:
1. 关键权限未完全授予
小米系统对后台自动化限制严格。除了无障碍服务和自启动,必须手动开启「后台弹出界面」和「悬浮窗」权限。缺少这两项会导致 Hamibot 初始化失败,脚本会直接退出。
- 路径:
设置→应用设置→应用管理→Hamibot→权限管理 - 确保
后台弹出界面和悬浮窗均为允许 - 在
手机管家→应用智能省电中将 Hamibot 设置为无限制,并在多任务界面锁定 Hamibot
2. 脚本内部存在未捕获错误
setInterval 的回调函数如果在首次执行时抛出异常,会导致整个脚本进程终止。Rhino 引擎对错误较为敏感,静默崩溃会直接表现为“运行结束”。
建议在脚本关键位置添加错误捕获,并观察完整日志:
// 文档地址 https://docs.hamibot.com/
console.log('wla_daemon 启动');
setInterval(function() {
try {
console.log('心跳日志');
// 你的业务逻辑放在这里
} catch (e) {
console.error('心跳异常: ' + e);
}
}, 5000);
// 保持主线程存活,防止脚本直接退出
while (true) {
sleep(1000);
}
注:Hamibot 使用 Rhino 1.7.15 引擎,不支持箭头函数和默认参数。上述写法已做兼容处理。
while(true) + sleep()可确保主线程不退出,定时器能稳定触发。
3. Beta 版本生命周期管理差异
1.7.1-beta 属于测试版本,脚本调度器和后台保活策略可能存在调整。建议:
- 切换到 Hamibot 最新稳定版进行对比测试
- 在稳定版中重新导入脚本并运行,观察是否仍立即退出
排查步骤建议
- 新建一个空白脚本,仅粘贴上面的最简常驻代码,测试是否能持续打印心跳。
- 查看 Hamibot 控制台完整日志,确认是否有
Permission denied、Uncaught或AccessibilityService not enabled等明确报错。 - 如果最简脚本能常驻,说明原
wla_daemon.js中存在导致崩溃的代码逻辑,需逐段注释排查。 - 如果最简脚本也立即退出,重点检查小米系统的权限设置和电池优化策略。
完成上述设置后,脚本即可正常常驻运行。如果问题依旧,提供 Hamibot 控制台的完整错误日志,我会进一步帮你定位。