Expo构建APK成功但无法加载Firestore数据且导航崩溃求助
排查步骤及解决方案
一、先解决日志获取问题(排查核心前提)
- 通过adb抓取设备日志:
- 确保电脑已安装Android SDK且
adb命令在系统PATH中 - 连接开启USB调试的设备,执行
adb logcat *:E仅查看错误日志,或用adb logcat | grep "Firebase\|ReactNative"过滤关键内容
- 确保电脑已安装Android SDK且
- 构建开发版APK查看日志:在
eas.json的构建配置中添加"developmentClient": true,构建完成后安装该APK,可直接在应用内查看调试日志,或通过Expo调试工具连接查看
二、Firestore数据不显示的排查与修复
- 核对Firebase配置:确保
google-services.json已放置在项目根目录,且eas.json的Android构建配置中指定了文件路径:"android": { "googleServicesFile": "./google-services.json" } - 检查Firestore安全规则:Expo Go调试环境可能使用宽松规则,生产环境需确认规则是否允许目标用户访问,可先临时放开测试:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; // 测试用,验证后需改回符合业务的认证规则 } } } - 对齐依赖版本:
package.json中expo-firebase-core、expo-firebase-firestore的版本需与当前Expo SDK版本匹配,版本不兼容会导致生产构建失效
三、导航崩溃的排查与修复
- 核对导航库版本:
@react-navigation/native、@react-navigation/stack等依赖版本需与react-native版本匹配,例如React Native 0.72对应@react-navigation/native@6.1.7左右版本 - 排查导航代码:生产环境会暴露Expo Go中被忽略的错误,比如未处理的异步操作、未定义的路由参数,检查所有
navigate调用的参数是否存在,异步操作是否添加try/catch处理 - 临时禁用Hermes测试:在
eas.json的Android构建配置中添加"hermesEnabled": false,若崩溃消失,说明Hermes与某依赖不兼容,需升级对应依赖或寻找替代方案
四、package.json与eas.json的调整示例
package.json依赖部分示例
"dependencies": { "expo": "~49.0.15", "expo-firebase-core": "~12.5.0", "expo-firebase-firestore": "~11.5.0", "@react-navigation/native": "^6.1.7", "@react-navigation/stack": "^6.3.17", "react-native": "0.72.6" // 其他业务依赖... }, "devDependencies": { "@babel/core": "^7.20.0" }
eas.json调整示例
{ "build": { "production": { "android": { "googleServicesFile": "./google-services.json", "buildType": "apk" } }, "development": { "android": { "developmentClient": true, "googleServicesFile": "./google-services.json" } } }, "submit": { "production": {} } }
内容的提问来源于stack exchange,提问作者Angeles III C. Tablante
相关产品推荐
相关产品推荐

