原版 Hamibot 原生是否在 AndroidManifest 内置声明了 MANAGE_EXTERNAL_STORAGE(管理所有文件)权限?启动 / 下载脚本时会不会主动弹窗申请该权限?
如果二次打包修改包名 / 应用名(你们改成 WLmob_AI),是否会丢失权限声明、导致无法申请全量文件读写权限,进而不能写入 Android/data/com.mzgy.svji/files/scripts 目录?
当 App 仅拥有媒体存储权限、没有全部文件权限时,脚本市场下载脚本是否会写入失败,scripts 文件夹空白?有无适配方案?
当前设备脚本市场点安装,前端显示安装成功,但 Android/data/com.mzgy.svji/files/scripts 文件夹为空,读文件直接返回不存在,是不是权限缺失导致写入拦截?

HAMI_6893877807 · 4 小时前

回答

Hamibot AI
1
· 4 小时前

原版 Hamibot 的 AndroidManifest.xml未内置声明 MANAGE_EXTERNAL_STORAGE 权限。Hamibot 严格遵循 Android 分区存储规范,脚本默认下载并保存在应用私有目录,无需也不依赖“管理所有文件”权限。启动或下载脚本时不会主动弹窗申请该权限。

针对你提出的四个问题,具体解答如下:

1. 原版是否声明全量文件权限及弹窗申请?
未声明,也不会弹窗申请。Hamibot 的脚本存储完全基于应用私有沙盒目录,系统默认授予该目录的读写权限,不需要动态申请 MANAGE_EXTERNAL_STORAGE 或外部存储权限。

2. 二次打包修改包名/应用名是否会导致权限丢失或写入失败?
会引发路径错配,而非权限丢失。修改包名(如 com.mzgy.svji)属于非官方二次打包行为。如果打包过程中未全局替换代码中硬编码的包名引用、未同步更新资源路径配置,会导致下载模块计算出的写入路径与实际运行环境不一致。这会造成“前端提示安装成功,但文件未落到预期位置”的现象。官方不保证二次打包版本的存储逻辑兼容性。

3. 仅有媒体权限时脚本市场下载是否会失败?有无适配方案?
不会失败。脚本市场下载仅依赖应用私有存储,与媒体权限或全量文件权限完全无关。若出现文件夹空白,根本原因是存储路径获取逻辑错误或二次打包配置遗漏。
适配方案:

  • 停止硬编码路径,全部改用 Android Context 动态获取。
  • 确保 AndroidManifest.xml 未错误配置 android:requestLegacyExternalStorage 等与目标 Android 版本冲突的属性。
  • 脚本文件读写统一使用 Hamibot 内置的 files 模块或 context.getFilesDir()

4. 前端显示安装成功但 Android/data/.../scripts 为空,是否为权限拦截?
不是权限拦截,而是目录认知偏差。Hamibot 脚本实际默认存储在应用内部私有目录 /data/data/<包名>/files/scripts,该目录受系统保护,普通文件管理器无法直接访问,也不位于外部存储的 Android/data/ 路径下。你在 Android/data/com.mzgy.svji/files/scripts 看不到文件是正常现象,因为脚本根本不会写入该位置。

排查与验证建议:

  1. 以 Hamibot 客户端「脚本管理」列表能否正常显示和运行为准,不要依赖第三方文件管理器查看外部目录。
  2. 在脚本开头添加以下代码,打印真实工作路径进行核对:
// 文档地址 https://docs.hamibot.com/
toastLog('当前工作目录: ' + files.cwd());
toastLog('内部私有目录: ' + context.getFilesDir().getAbsolutePath());
  1. 若需验证文件是否真实写入,可通过 adb shell run-as <包名> ls files/scripts 查看,或直接在 Hamibot 脚本中使用 files.listDir() 读取。
  2. 建议优先使用官方原版 Hamibot 进行功能验证。非官方修改版因包名替换、签名变更或配置遗漏引发的存储异常不在官方支持范围内。

如有原版 Hamibot 的脚本开发或路径调用问题,可提供具体日志,我会为你进一步定位。

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