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

Expo开发React Native安卓应用权限配置引发崩溃问题求助

Expo React Native 安卓权限配置与崩溃问题解决

权限配置分两种工作流处理,别搞混:

  • Managed 工作流(没执行过prebuild,全程用Expo工具链打包):
    只需要在app.json里配置android.permissions就行,Expo打包时会自动把这些权限写入原生的AndroidManifest.xml,不用手动改原生文件。注意适配Android版本调整权限:

    "android": {
      "permissions": [
        "CAMERA",
        "ACCESS_FINE_LOCATION",
        "ACCESS_COARSE_LOCATION",
        // Android 13+ 用这个替代READ_EXTERNAL_STORAGE
        "READ_MEDIA_IMAGES",
        // 仅针对Android 10及以下版本保留WRITE权限
        "WRITE_EXTERNAL_STORAGE"
      ],
      // 可选:指定targetSdkVersion,确保权限适配正确
      "targetSdkVersion": 33
    }
    
  • Bare 工作流(执行过prebuild,有原生Android项目目录):
    这种情况app.json的权限配置不会自动同步到原生文件,两种处理方式二选一:

    1. 重新生成原生文件:运行npx expo prebuild --clean,Expo会根据app.json的配置自动更新AndroidManifest.xml里的权限。
    2. 手动修改android/app/src/main/AndroidManifest.xml,在<manifest>标签内添加权限:
      <uses-permission android:name="android.permission.CAMERA" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
      <!-- 仅针对Android 10及以下 -->
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
      

崩溃问题排查步骤:

  1. 先确认权限是否正确生效:
    打包后在安卓系统设置里查看应用权限列表,看需要的权限是否存在。如果缺失,说明配置没生效,回到上面的工作流对应步骤检查。

  2. 检查权限请求代码:
    绝对不能直接调用相机、位置API,必须先请求权限并判断是否授权,比如:

    import * as Location from 'expo-location';
    
    const checkLocationPermission = async () => {
      const { status } = await Location.requestForegroundPermissionsAsync();
      if (status !== 'granted') {
        alert('请开启位置权限才能使用该功能');
        return false;
      }
      // 授权后再执行后续逻辑
      const location = await Location.getCurrentPositionAsync({});
      return location;
    };
    

    最新版本登录后崩溃,大概率是列表组件加载图片时用到了存储权限,但没提前请求或权限未声明,导致触发SecurityException。

  3. 查看崩溃日志定位问题:
    用adb连接设备,运行adb logcat *:E查看错误日志,找到崩溃的具体异常信息(比如java.lang.SecurityException: Permission denied),能精准定位是哪个权限缺失或者代码哪里出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:01:00