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

使用Expo开发React Native时,AndroidManifest莫名添加READ_EXTERNAL_STORAGE权限

解决Expo React Native项目中自动添加READ_EXTERNAL_STORAGE权限的问题

1. 定位权限来源的系统方法

用Gradle日志精准定位

先执行expo prebuild生成原生Android项目文件,进入项目根目录下的android文件夹,运行:

./gradlew app:mergeDebugAndroidManifest --info

在输出的日志里搜索android.permission.READ_EXTERNAL_STORAGE,日志会明确标注该权限来自哪个依赖库的Manifest文件,比如:

Merging permission from node_modules/react-native-ui-lib/android/src/main/AndroidManifest.xml

排查可疑依赖

  • 查看项目依赖树:npm用户执行npm ls,yarn用户执行yarn list,筛选出涉及文件存储、媒体操作的库(比如UI组件库、统计SDK)。
  • 直接检查库的Manifest:进入node_modules/[目标库名]/android/src/main/,打开AndroidManifest.xml,搜索是否包含该权限。

2. 阻止权限被添加的方法

通过Expo配置移除(推荐)

在app.config.js或app.json的expo.android.permissions中,用-权限名的语法移除不需要的权限:

{
  "expo": {
    "android": {
      "permissions": [
        // 保留业务需要的权限,例如
        "android.permission.INTERNET",
        // 移除自动添加的存储权限
        "-android.permission.READ_EXTERNAL_STORAGE"
      ]
    }
  }
}

重新构建项目,Expo会自动处理Manifest合并,剔除该权限。

手动修改AndroidManifest.xml(预构建后)

预构建完成后,打开android/app/src/main/AndroidManifest.xml,先在根标签引入tools命名空间,再添加移除权限的配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">
  <!-- 其他原有配置 -->
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
</manifest>

tools:node="remove"会强制在Manifest合并阶段删除该权限。

Gradle配置层面排除

在android/app/build.gradle的defaultConfig块中添加Manifest占位符:

defaultConfig {
  // 其他配置项
  manifestPlaceholders = [
    excludeReadExternalStorage: "true"
  ]
}

然后在AndroidManifest.xml中配合使用:

<uses-permission 
  android:name="android.permission.READ_EXTERNAL_STORAGE" 
  tools:node="${excludeReadExternalStorage == 'true' ? 'remove' : 'merge'}" />

内容的提问来源于stack exchange,提问作者Nataly Firstova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:23:41