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

授予位置权限后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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:43:26