如何为Android应用获取外部SD卡写权限绕过技巧

29次阅读
没有评论

如何为 Android 应用程序获取外部 SD 卡写权限

如果你正在开发一个需要访问外部存储的 Android 应用程序,并且遇到了在安装或运行过程中缺少 WRITE_EXTERNAL_STORAGE 权限的问题,那么你可能需要采取额外步骤以获得写入权限。由于 Google 对该权限的要求逐渐严格化,特别是对于新应用(需通过申请才能获取),我们这里将介绍一种工作绕过方法。

一、背景:理解 Android 卷帘库与 Termux 的关系

首先,有必要了解几个关键概念和组件:
1. 卷帘库: Google 在 Android 9(Pie)推出的一个 API 特性,旨在改善应用对设备硬件的访问权限。这主要包括蓝牙、Wi-Fi 和存储权限。
2. Termux Terminal App:这是一个运行在 Termux 环境中的安卓终端模拟工具包。由于它自身是一个使用虚拟文件系统的独立应用程序(名为“共享用户”),因此无法直接获得外部 SD 卡写入的权限。

二、问题描述

当你尝试获取 Termux 的 WRITE_EXTERNAL_STORAGE 权限时,如果遇到了权限被拒绝的问题,你需要进行手动干预来增加必要的权限条目。以下是具体的解决步骤:

  1. 备份现有的 packages.xml 文件
  2. 使用命令 cp packages.xml /storage/emulated/0/tmp 做一份当前的 packages.xml 的备份。

  3. 打开编辑器修改 packages.xml 文件:

  4. 你可以使用 Termux 中内建的文本编辑工具,不过推荐的方式是将文件复制到一个容易访问的位置并手工修改。具体命令如下:
    bash
    cp /data/data/com.termux/files/usr/etc/packages.xml /storage/emulated/0/tmp/pacakges.xml

  5. 查找与 Termux 对应的权限声明:

  6. 在备份文件中查找 Termux 应用对应的共享使用权 <shared-user> 节点。

  7. 插入一个全新的写外部存储权限声明

  8. 找到该 <item name="android.permission.WRITE_EXTERNAL_STORAGE" granted="false" flags="0" /> 的位置,将其复制并粘贴在其下方,然后修改 name 属性以指向你想要给予写权限的应用。

  9. 设置新的权限为 WRITE_MEDIA_STORAGE

  10. 按照以下格式调整新插入的条目:<item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />

  11. 替换并保存文件:

  12. 使用以下命令进行替换:
    bash
    cp /storage/emulated/0/tmp/packages.xml packages.xml
  13. 切勿使用 mv 命令,因它不能确保正确的权限设置。

  14. 验证修改有效性 & 执行相关操作:

  15. 重新启动 Termux 并检查新应用的存储写入是否生效。

  16. 最终检查与重启确认:

  17. 运行 diff packages.xml packages.xml.orig1(或者其它文件名)以确保未出现错误。最后别忘了移除或回滚任何临时更改,然后安全重新启动您的手机。

三、注意事项

  • 尽管上述方法在某些情况下能成功解决问题,但它依然存在一定的风险。
  • 这个过程可能会导致某些不预期的结果。
  • 在实际操作前建议确保备份重要数据,并详细阅读官方文档指导。如有不对之处,请根据最新的 Android 和 Termux 版本做必要调整。

总结来说,在正式发布应用前请尽量请求用户明确授予必要的外部存储权限,避免采用如上这样临时且危险的处理方法。

正文完