移除MANAGE_EXTERNAL_STORAGE后Android应用仍遭Play Store拒绝求排查
问题排查与解决建议
核心问题分析
从你提供的Manifest代码来看,Google Play拒绝的原因很明确:你的应用仍保留了不必要的外部存储权限及遗留存储配置,不符合Play商店的权限政策。具体问题点:
- 声明了
READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,这两个权限针对共享外部存储访问,若应用无实际需求,Play会判定为权限滥用。 - 应用标签里设置了
requestLegacyExternalStorage="true"和preserveLegacyExternalStorage="true",这两个属性用于启用Android 10之前的遗留存储模式,会让Play认为你在依赖旧的外部存储机制,进一步坐实"不需要访问设备存储"的判定。
解决步骤
1. 清理Manifest中的冗余配置
- 删除以下权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> - 移除application标签中的这两个属性:
android:preserveLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
2. 替换代码中的外部存储API
检查代码中是否存在调用旧外部存储API的逻辑,替换为符合Scoped Storage规范的实现:
- 应用私有文件存储:使用
Context.getFilesDir()(内部存储,完全私有)或Context.getExternalFilesDir(null)(外部存储的应用私有目录,无需权限) - 媒体文件存储/读取:
- 写入自身生成的媒体文件:使用
MediaStoreAPI,Android 10+无需权限 - 读取其他应用的媒体文件:Android 13+使用细分权限
READ_MEDIA_IMAGES/READ_MEDIA_VIDEO/READ_MEDIA_AUDIO,而非旧的READ_EXTERNAL_STORAGE
- 写入自身生成的媒体文件:使用
- 缓存文件:使用
Context.getCacheDir()(内部缓存)或Context.getExternalCacheDir()(外部缓存目录,无需权限)
3. 更新Play商店权限声明
如果之前在Play控制台填写了存储权限的使用说明,需删除相关内容,确保权限声明与应用实际使用的权限一致。
4. 重新提交审核
完成上述修改后,重新打包签名应用,提交到Google Play,并在审核备注中说明已移除不必要的存储权限及配置。
内容的提问来源于stack exchange,提问作者Rupesh Rathore
相关产品推荐
相关产品推荐

