作用域存储权限声明需更新导致Google Play上架失败问题咨询
问题原因
你当前的配置触发了Google Play的分区存储政策审核警告,核心问题是targetSdkVersion 31(对应Android 12)已经不支持旧版存储权限的过渡方案,且全文件访问权限MANAGE_EXTERNAL_STORAGE属于Google严格管控的特殊权限,无合理使用场景会直接被拒。
解决步骤
1. 先确认App是否真的需要全文件访问权限
绝大多数普通App(比如社交、工具、影音类)只需要访问自有私有目录、公共媒体文件、用户主动选择的文件,完全不需要申请全文件访问权限,直接走普通适配流程即可。只有文件管理器、备份还原、杀毒、文档编辑类必须遍历全磁盘的App,才需要申请特殊权限。
2. 修改AndroidManifest.xml配置
移除以下不需要的权限声明:
<uses-permission android:name="android.permission.ACTION_MANAGE_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
同时删除application节点下的android:requestLegacyExternalStorage="true"属性,该属性仅为targetSdkVersion ≤29的App提供过渡兼容,targetSdk≥30时已失效,还会触发审核警告。
如果你的App确实需要访问公共媒体文件,可以补充适配分版本的媒体权限:
<!-- Android 13及以上读取照片权限 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- Android 13及以上读取视频权限 --> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- Android 13及以上读取音频权限 --> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- 兼容Android 12及以下的存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
3. 调整App存储逻辑
适配分区存储规则,不需要申请全权限即可实现绝大多数存储需求:
- App私有缓存、专属文件直接存入
/sdcard/Android/data/[你的应用包名]/目录,读写无需任何权限 - 公共媒体文件(照片/视频/音频)使用MediaStore API读写,仅需要申请上面对应的媒体权限
- 用户主动选择的文件/目录使用系统存储访问框架(SAF)调取系统文件选择器访问,无需申请存储权限
4. 特殊权限申请(仅适用于必须全文件访问的App)
如果你的App确实属于需要全文件访问的类别,需要在Google Play开发者后台的「应用内容」-「权限声明」板块提交MANAGE_EXTERNAL_STORAGE权限的使用说明,详细描述业务场景为什么必须使用该权限,同时上传功能操作演示视频,等待Google审核通过后才能正常上架。
额外建议
当前Google Play要求新上架和更新的App必须至少适配targetSdkVersion 33(对应Android 13),建议你直接把build.gradle里的compileSdkVersion和targetSdkVersion都升级到33,同步完成最新系统的权限适配,避免后续再触发政策类审核问题。
内容的提问来源于stack exchange,提问作者Sercan Kaya

