React Native Expo中Google Map仅APK崩溃、本地运行正常问题排查
React Native Expo Google Map打包APK后崩溃问题排查与解决
实际问题分析
- API密钥生产环境配置缺失:本地开发用的调试密钥未配置生产APK的SHA-1指纹,导致Google Maps API请求被拒绝,触发应用崩溃。
- 原生依赖未正确集成:Expo打包过程中,Google Maps相关原生模块未被完整植入APK,运行时找不到核心依赖引发崩溃。
- 权限声明不完整:生产APK未在配置文件中声明位置权限,进入地图页面时权限请求失败直接导致应用崩溃。
- 版本兼容性冲突:使用的
expo-google-maps/react-native-maps与当前Expo SDK版本不兼容,本地缓存掩盖了问题,打包后暴露冲突。
解决方案
1. 配置生产环境API密钥
- 生成生产APK的SHA-1指纹:
keytool -list -v -keystore 你的发布密钥库.jks -alias 你的密钥别名 - 登录Google Cloud控制台,将生成的SHA-1指纹添加到Maps API密钥的允许列表中。
- 在
app.config.js中指定生产环境API密钥:export default { expo: { // ...其他配置 android: { config: { googleMaps: { apiKey: '你的生产环境API密钥' } } } } }
2. 确保原生依赖正确打包
- 若使用第三方
react-native-maps,先执行Expo预构建:npx expo prebuild --platform android - 检查
android/app/src/main/AndroidManifest.xml是否包含Maps配置:<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_api_key" />
3. 补充权限声明
- 在
app.config.js中添加位置权限:export default { expo: { // ...其他配置 android: { permissions: [ "ACCESS_COARSE_LOCATION", "ACCESS_FINE_LOCATION" ] } } } - 在加载地图前主动请求权限:
import { PermissionsAndroid } from 'react-native'; const requestLocationPermission = async () => { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, { title: "位置权限请求", message: "应用需要位置权限来加载地图", buttonPositive: "允许" } ); return granted === PermissionsAndroid.RESULTS.GRANTED; };
4. 修复版本兼容性
- 查看Expo官方文档,确认
expo-google-maps/react-native-maps与当前Expo SDK的兼容版本。 - 安装兼容版本:
npm install expo-google-maps@~13.0.0 # 示例:适配Expo SDK 49的版本
内容的提问来源于stack exchange,提问作者Prabhakar Azad
相关产品推荐
相关产品推荐

