一、使用场景
通过 engines.execScript 调度市场上架脚本,采用官方标准传参写法,守护脚本读取本地指令文件 wla_command.json 获取配置后拉起子脚本。
二、API 调用代码(已按官方文档修改)
js
运行
engines.execScript("脚本市场ID", "", {
arguments: [JSON.stringify(taskConfig)]
});

第二个参数填空字符串占位,第三个配置对象传入arguments参数数组,已修复之前参数顺序错误导致的语法报错;
守护侧日志正常打印「拉起脚本、参数下发完成」,无任何报错。
三、异常现象
守护日志显示:引擎成功触发子脚本 开始运行,但下一行立刻提示 运行结束,用时0.000000秒;
子脚本完全无任何日志输出,包括脚本第一行调试打印、参数接收打印、业务循环日志全部缺失;
手动在 Hamibot App 内点开该市场脚本单独执行,代码完整运行,所有调试日志、循环逻辑正常打印,无闪退;
仅通过 engines.execScript 远程拉起时,脚本瞬间销毁,不执行任何代码。
四、已做排查操作
确认 API 传参格式完全匹配官方文档,语法报错已解决;
多次卸载市场脚本、清理 App 缓存后重装最新版代码,问题不变;
子脚本内第一行增加调试打印,远程拉起依旧无输出,手动运行正常;
整套链路文件读取、JSON 解析、调度函数执行全部正常,仅子脚本执行环节异常退出。
五、核心问题
为什么 engines.execScript 拉起市场上架脚本时,脚本启动后立刻销毁、不执行任何代码,但是手动点开运行完全正常?
市场上架脚本是否存在 execScript 远程拉起的底层执行限制、进程拦截机制?
有无兼容方案可以实现守护脚本远程调度市场脚本并正常执行完整逻辑?

HAMI_6893877807 · 5 小时前

回答

Hamibot AI
1
· 5 小时前

你遇到的现象是因为 engines.execScript 的第二个参数(脚本内容)传入了空字符串 "",所以引擎实际执行的是一个“空脚本”,执行后立刻结束,自然不会有任何日志输出。

engines.execScript 的正确用法
engines.execScript(name, script, config)

  • name:自定义的脚本名称,只是用于标识,不是市场脚本的 ID
  • script要执行的完整脚本代码字符串(必须,不能为空)
  • config:可选配置(如 arguments 等)

你写的:

engines.execScript("脚本市场ID", "", {
    arguments: [JSON.stringify(taskConfig)]
});

相当于让引擎执行一个内容为空的脚本,所以它立即结束,用时 0 秒。

为什么手动运行正常?
因为在 Hamibot App 内手动点开市场脚本时,App 会自动加载该脚本的完整代码并执行,与 execScript 的调用方式完全不同。

如何实现守护脚本远程调度市场脚本?
目前 Hamibot 没有提供直接通过脚本市场 ID 远程拉起并执行完整脚本的 API。但你可以通过以下兼容方案实现:

  1. 将市场脚本的完整代码复制到守护脚本中,通过 execScript 传入

    var scriptContent = "toast('子脚本已启动'); // ... 完整业务代码";
    engines.execScript("子脚本", scriptContent, {
        arguments: [JSON.stringify(taskConfig)]
    });
    

    注意:如果市场脚本有版权或收费,直接复制代码可能违反使用协议,请务必确认合规性。

  2. 将市场脚本保存为本地文件,用 execScriptFile 执行
    先将市场脚本的代码导出为 .js 文件存放到设备存储中,然后调用:

    engines.execScriptFile("/sdcard/脚本.js", {
        arguments: [JSON.stringify(taskConfig)]
    });
    

    这样就能正常执行完整脚本,包括调试日志和业务逻辑。

  3. 通过定时任务广播启动(如果你希望子脚本以独立进程运行)
    可以设置一个定时任务,使用广播方式启动,但这种方法需要提前配置好定时任务,并依赖 engines.execScriptFile 或其他方式触发。

总结
出现“瞬间结束”的原因是 execScript 的第二个参数为空,导致执行了空脚本。请改用上述方案,将完整的脚本代码(或文件)传入即可。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实