启动不了脚本,什么原因,怎么处理

已存档
3uvvkmqz7e · 24 天前

回答

Hamibot AI
1
· 24 天前

根据常见问题及你的截图场景,以下是启动失败的可能原因及解决方案:

1. 权限未正确授予

  • 现象:截图中显示浏览器地址栏有权限弹窗,设备未开启无障碍服务或截图权限。
  • 解决
    • 在设备上打开 设置 > 应用管理 > Hamibot > 权限管理,确保授予以下权限:
      • 无障碍服务(强制)
      • 存储权限(用于读写日志)
      • 悬浮窗权限(部分设备需要)
    • 运行脚本时若弹出权限确认框,需手动点击「允许」(参考文档5的自动点击逻辑处理)。

2. 未通过 Hamibot 控制中心正确启动

  • 现象:从浏览器或控制中心直接点击脚本无响应。
  • 解决
    1. 确保使用推荐浏览器(Edge/Chrome),并添加控制中心到主屏幕(文档3)。
    2. 登录 Hamibot 账号后,进入控制中心「控制页面」:
    • 点击【新增】,选择设备和脚本。
    • 保存后点击【添加到首页】,从首页直接启动(见文档3步骤图示)。

3. 令牌或脚本ID错误

  • 现象:调用开发脚本接口返回失败(如401未授权或404找不到脚本)。
  • 解决
    • 检查代码中的 authorization 字段是否为 hmp 开头的令牌(文档1)。
    • 确认脚本ID是否正确(如 GET /v1/devscripts/{开发脚本_id} 中的 ID)。
    • 通过以下代码验证令牌和ID:
      // 文档地址 https://docs.hamibot.com/
      var res = http.get('https://api.hamibot.com/v1/devscripts', {
        headers: {
          authorization: '你的令牌(hmp 开头)'
        }
      });
      if (res.statusCode == 200) {
        toastLog('脚本列表: ' + JSON.stringify(res.body.json()));
      } else {
        toastLog('获取脚本失败: ' + res.statusMessage);
      }
      

4. 脚本依赖的 Hamibot 版本不匹配

  • 现象:脚本调用 requiresHamibotVersion() 后立即退出。
  • 解决
    • 在脚本开头添加以下代码检查当前版本:
      // 文档地址 https://docs.hamibot.com/
      toastLog('当前Hamibot版本: ' + app.hamibot.versionName);
      // 替换为脚本要求的版本
      requiresHamibotVersion("1.4.3"); 
      
    • 若版本过低,请更新 Hamibot 客户端。

5. 日志文件写入失败

  • 现象:脚本执行无输出,控制台无日志。
  • 解决
    • 检查是否授权存储权限(见第1步)。
    • 手动检查日志路径是否存在(默认 /Hamibot/logs/),或修改日志目录为可写路径:
      // 文档地址 https://docs.hamibot.com/
      const LOG_DIR = '/sdcard/Hamibot/logs/'; // 确保存储权限开启
      if (!files.exists(LOG_DIR)) {
        files.createWithDirs(LOG_DIR);
      }
      

6. 截图权限未持久化

  • 现象:首次运行提示截图权限,点击允许后仍无法启动。
  • 解决
    • 参考文档5的自动点击代码,在脚本开头添加持久化权限请求逻辑。
    • 修改代码中的 threads.shutDownAll() 延迟时间,确保弹窗完全关闭:
      sleep(3000); // 延长等待时间
      threads.shutDownAll();
      

最终排查步骤

  1. 检查设备 无障碍服务是否开启(强制)。
  2. 确认通过 Hamibot控制中心auto.waitFor() 显式请求权限。
  3. 运行以下代码测试基础功能:
    // 文档地址 https://docs.hamibot.com/
    toastLog('无障碍服务: ' + auto.service != null);
    if (!requestScreenCapture()) {
      toastLog('截图权限失败');
    } else {
      toast
ℹ️ 本回答由 AI 生成,内容仅供参考