解决夜 Builds 中下载问题的方案
环境和问题描述
近期在使用 Nightly Build(如 CM 12.1 和 Slimkat)时遇到了下载权限方面的问题。具体表现为 DownloadManager 返回 403 Forbidden 错误,但其他非官方 ROM 在之前并无此问题。
分析与检查
根据提供的日志信息,错误来源主要可能为以下几点:
-
夜建 ROM 权限变化: 根据 Google Issue Tracker #195153 的提示:“Apps that use the DownloadManager, targetSdkVersion < 23, and WRITE_EXTERNAL_STORAGE will experience this problem.” 这表明使用目标 SDK 版本小于 23 并且需要写外部存储权限的应用在夜建 ROM 中可能会遇到此问题。这意味着需要检查应用是否符合这些条件。
- 解决方案: 检查您的下载应用,确定其是否需要 WRITE_EXTERNAL_STORAGE 权限,并确保它使用的目标 SDK 版本正确。
-
文件权限调整: 用户反映自己曾经通过 root 命令修改了 SD 卡部分目录的拥有所属者,导致此问题。
- 解决方案:您可以通过恢复根用户的权限或将相应目录的权限重新分配给媒体用户群组来解决该问题。例如:
shell
chown -R media_rw:media_rw /sdcard/*其中
/sdcard/
可能会根据不同的设备和固件有所不同,建议查阅您的固件文档以确认实际路径。 -
其他权限策略变化: 如问题中提到的,有时某些权限可能在不同版本的系统或 ROM 中有所调整。
- 解决方案:确保您的应用已经申请了必要的权限,并且这些权限在新的 ROM 版本中不会造成冲突。可以在 AndroidManifest.xml 文件中检查是否有相关权限声明并进行相应修改。
实施步骤
-
首先,确保安装的应用程序具备正确的写入存储和读取网络数据的权限:
xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -
使用 Root 工具检查并调整 SD 卡文件的访问:
- 通过 TWRP 或其他基于 Recovery 的工具执行以下命令重新设置所有权:
shell
chown -R media_rw:media_rw /sdcard/ -
更新和确认安装的应用程序符合目标 SDK 版本以及正确的权限声明。
-
如果问题依然存在,请考虑恢复到一个更稳定版本的 ROM,或者尝试联系开发者寻求进一步的帮助。
-
记录每次尝试及更改操作的方法,并观察结果。
最终解决
根据最后一条回复中的信息,用户通过运行以下命令解决了文件系统的所有权问题:
chown -R media_rw:media_rw /sdcard/*
并解释说这样做修复了 403 Forbidden 的下载错误。这样,在重新设置 SD 卡的权限后,DownloadManager 能够正常工作。
总结
虽然 Nightly Build ROMs 在代码和机制上经常发生改变,但通过上述步骤您可以尝试从多个角度来解决下载权限问题。同时,定期备份重要数据、遵循官方文档推荐的做法以及与社区交流也会帮助您更快地找到解决问题的方法。