授予位置权限后EAS构建的Expo应用立即崩溃求助
解决EAS构建后授予位置权限崩溃的问题
1. 补全权限配置(关键)
Expo Go会自动处理部分权限默认配置,但EAS构建需要完整声明权限描述和权限项:
- iOS:在
app.json的expo.ios.infoPlist中添加位置权限描述:
"ios": { "infoPlist": { "NSLocationWhenInUseUsageDescription": "需要获取您的位置以显示地图", "NSLocationAlwaysAndWhenInUseUsageDescription": "需要获取您的位置以显示地图" } }
- Android:在
app.json的expo.android.permissions中添加必要权限:
"android": { "permissions": [ "ACCESS_COARSE_LOCATION", "ACCESS_FINE_LOCATION", "FOREGROUND_SERVICE_LOCATION" ] }
2. 检查依赖版本兼容性
确保expo-location和react-native-maps使用与当前Expo SDK匹配的版本:
- 运行
expo install expo-location react-native-maps强制安装适配当前SDK的版本 - 避免使用未兼容最新SDK的第三方依赖
3. 优化权限请求逻辑
将权限请求延迟至组件挂载后短暂时间,避免原生环境初始化冲突:
useEffect(() => { const fetchLocation = async () => { // 延迟100ms再请求,避免原生启动时的资源竞争 await new Promise(resolve => setTimeout(resolve, 100)); let { status } = await Location.requestForegroundPermissionsAsync(); if (status !== 'granted') { setErrorMsg('Permission to access location was denied'); return; } try { let location = await Location.getCurrentPositionAsync({}); setLocation(location); } catch (error) { setErrorMsg('Unable to get location: ' + error.message); } }; fetchLocation(); }, []);
4. 获取崩溃日志定位根因
没有日志很难精准解决,建议:
- iOS:连接设备到Xcode,打开
Window > Devices and Simulators,选中设备查看View Device Logs - Android:运行
adb logcat *:E过滤错误日志,在崩溃时查看输出的异常信息
5. 检查EAS构建配置
确认eas.json中的构建配置没有禁用位置相关模块:
- 确保没有在
build配置中添加expo-location的排除项 - 对于Android,检查
compileSdkVersion和targetSdkVersion是否不低于33(高版本对位置权限有更严格的要求)
内容的提问来源于stack exchange,提问作者Rhemi
相关产品推荐
相关产品推荐

