You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native 适配 Android 11 作用域存储 如何使用 expo-image-picker

Android端ImagePicker合规调整方案

1. 是否需要调整现有ImagePicker的调用API?

  • 核心调用逻辑完全不需要改动,你之前使用的requestMediaLibraryPermissionsAsync、requestCameraPermissionsAsync、launchImageLibraryAsync、launchCameraAsync这套API在适配Android 11+的新版本中完全兼容。
  • 你之前写的requestMediaLibraryPermissionsAsync也不需要删除,新版本会自动适配系统Photo Picker的权限逻辑,调用时会直接返回合法的权限状态,不会向用户申请冗余的存储权限。
  • 唯一需要做的是把expo-image-picker升级到适配Android 11+的版本(对应Expo SDK 45及以上的配套版本):旧版本的expo-image-picker依赖旧存储模型,打包时会自动注入你收到通知中提到的requestLegacyExternalStorage标记,这是合规问题的根源,新版本已经全部适配Scoped Storage,不需要你手动接入Media Store或Storage Access Framework,SDK已经帮你完成封装。
  • 新版本默认会优先调用Android系统自带的Photo Picker,走Google推荐的权限模型,不需要额外配置。拍照逻辑也不需要额外调整,新版调用相机拍照后,结果会直接存入应用专属的缓存目录,不需要申请公共存储的写入权限,也不会触碰其他应用的文件。
  • 注意不要在launchImageLibraryAsync或launchCameraAsync里加legacy: true参数,这个参数会强制启用旧的存储逻辑,触发合规问题,默认不加就是走新的合规逻辑。

2. app.json的权限数组要怎么调整?

针对你仅需选图、拍照的场景,按照以下规则增减即可:

需要删除的权限

  • 删除CAMERA_ROLL:这是Expo旧版本的废弃权限别名,新版本已经不再识别,系统会根据你调用的API自动处理权限申请逻辑。
  • 删除READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE:你的场景完全不需要公共存储的读写权限,Scoped Storage下通过系统Photo Picker拿到的图片、拍照生成的文件,应用都有合法的访问权限,申请这两个旧权限反而会触发谷歌的合规检测。
  • 不要添加MANAGE_EXTERNAL_STORAGE权限:你的场景没有合法的全文件访问需求,申请该权限会直接被谷歌下架。
  • 如果你的应用其他功能不需要定位的话,直接删掉LOCATION权限即可,和本次合规问题无关。

可以保留的权限

  • 保留CAMERA权限:这是调用相机拍照的必需权限,没有合规风险。

不需要新增的权限

  • 不需要加READ_MEDIA_IMAGES、READ_MEDIA_VIDEO这类Android 13的媒体权限:因为你用的是系统Photo Picker模式,不需要提前申请媒体库的遍历权限,只有当你要自己开发自定义相册、遍历全部媒体文件时才需要添加,你的场景完全不需要。

合规验证步骤

  • 升级依赖并调整配置后,打包新的aab/apk文件,解压后查看AndroidManifest.xml文件,确认没有requestLegacyExternalStorage标记,就完全符合谷歌的要求。
  • 你的场景完全匹配谷歌通知中的第1种合规方案,不需要选择全文件访问的申报路径。

内容的提问来源于stack exchange,提问作者Habibur Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 17:24:08