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的权限配置不会自动同步到原生文件,两种处理方式二选一:- 重新生成原生文件:运行
npx expo prebuild --clean,Expo会根据app.json的配置自动更新AndroidManifest.xml里的权限。 - 手动修改
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" />
- 重新生成原生文件:运行
崩溃问题排查步骤:
先确认权限是否正确生效:
打包后在安卓系统设置里查看应用权限列表,看需要的权限是否存在。如果缺失,说明配置没生效,回到上面的工作流对应步骤检查。检查权限请求代码:
绝对不能直接调用相机、位置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。
查看崩溃日志定位问题:
用adb连接设备,运行adb logcat *:E查看错误日志,找到崩溃的具体异常信息(比如java.lang.SecurityException: Permission denied),能精准定位是哪个权限缺失或者代码哪里出错。
内容的提问来源于stack exchange,提问作者JuancaOStos
相关产品推荐
相关产品推荐

