如何解决Google Play Store的图片/视频权限合规警告?
解决Google Play权限合规警告(READ_MEDIA_IMAGES/READ_MEDIA_VIDEO)
核心问题定位
手动在Manifest中移除权限后仍收到警告,90%是因为依赖插件的Manifest被自动合并,重新添加了权限。Android的Manifest合并机制会将所有依赖库的Manifest内容合并到主Manifest中,即使你手动删除,依赖库的权限声明也会被加回来。
具体解决步骤
1. 找出哪个依赖在申请权限
- Android Studio可视化排查:打开Flutter项目的
android模块,找到app/src/main/AndroidManifest.xml,点击文件顶部的Merged Manifest标签,在搜索框输入READ_MEDIA,右侧会显示该权限来自哪个依赖库(比如com.example:some-plugin:x.x.x)。 - 命令行排查:在项目的
android目录下执行:
然后查看生成的报告文件:./gradlew app:mergeDebugAndroidManifestbuild/outputs/logs/manifest-merger-debug-report.txt,搜索READ_MEDIA,找到对应的依赖来源。
2. 强制移除依赖带来的权限
在你的主AndroidManifest.xml中添加权限移除声明,同时确保根标签包含tools命名空间:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- 必须添加这个命名空间 --> <!-- 强制移除依赖库添加的权限 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" tools:node="remove" /> <!-- 其他原有内容 --> <application ...> ... </application> </manifest>
tools:node="remove"会强制合并时忽略所有依赖库中该权限的声明。
3. 替换依赖的媒体访问逻辑
- 检查涉事依赖的文档,看是否有开关可以禁用权限请求(比如部分图片选择插件支持启用系统照片选择器模式,无需申请权限)。
- 如果依赖无法配置,替换为支持Android照片选择器的插件:比如官方
image_picker插件,在最新版本中默认使用照片选择器(无需权限),代码示例:import 'package:image_picker/image_picker.dart'; Future<void> pickMedia() async { final picker = ImagePicker(); // 选择图片,无需权限 final image = await picker.pickImage(source: ImageSource.gallery); // 选择视频,无需权限 final video = await picker.pickVideo(source: ImageSource.gallery); }
4. 验证权限是否彻底移除
- 打包release APK后,用
aapt命令检查权限:
确认输出中没有aapt dump permissions app/build/outputs/apk/release/app-release.apkREAD_MEDIA_IMAGES和READ_MEDIA_VIDEO。 - 在测试设备安装APK,进入「设置→应用→你的应用→权限」,确认没有媒体相关权限的申请项。
5. 提交合规申诉/说明
在Google Play控制台的合规页面,提交以下内容:
- 说明已通过
tools:node="remove"移除了依赖带来的权限 - 附上合并后的Manifest截图(无相关权限)
- 说明已改用Android照片选择器实现媒体选择功能
- 附上测试设备的权限页面截图
内容的提问来源于stack exchange,提问作者Jessica Athanasius
相关产品推荐
相关产品推荐

