Expo React Native应用生产环境崩溃,开发环境无异常
Expo Android生产构建崩溃排查求助
- 用expo-cli开发的应用,在development client中测试完全正常,但通过
eas build android构建出的.aab上传Google Play后,用户下载安装即立即崩溃。 - 尝试集成Sentry监控生产环境崩溃,但崩溃后Sentry控制台无任何错误日志。
- 此前尝试安装
react-native-iap失败,移除该包后应用就无法正常构建运行,目前找不到排查方向。
已尝试的操作
- 运行
npx expo-doctor未检测到任何依赖或配置错误 - 卸载过多个无关依赖包,无效
- 执行
npx expo start --no-dev时应用运行正常 - 昨天应用还能正常构建运行,无代码或配置的重大变更
项目依赖包列表
{ "dependencies": { "@react-native-async-storage/async-storage": "1.18.2", "@react-native-community/masked-view": "^0.1.11", "@react-native-community/slider": "4.4.2", "@react-navigation/native": "^6.1.9", "@react-navigation/stack": "^6.3.20", "@sentry/react-native": "5.5.0", "axios": "^1.6.2", "dotenv": "^16.3.1", "expo": "^49.0.19", "expo-clipboard": "~4.3.1", "expo-dev-client": "~2.4.12", "expo-image-picker": "~14.3.2", "firebase": "^10.6.0", "i18next": "^23.7.6", "ocr-space-api-wrapper": "^2.1.3", "react": "18.2.0", "react-dom": "18.2.0", "react-i18next": "^13.5.0", "react-native": "0.72.6", "react-native-gesture-handler": "~2.12.0", "react-native-google-mobile-ads": "^12.4.0", "react-native-reanimated": "~3.3.0", "react-native-safe-area-context": "4.6.3", "react-native-screens": "~3.22.0", "react-native-vector-icons": "^10.0.2", "react-native-web": "~0.19.6", "sentry-expo": "~7.0.0" }, "devDependencies": { "@babel/core": "^7.19.3" }, "scripts": { "start": "expo start", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web" }, "version": "1.0.0", "private": true, "name": "quip_quick" }
排查建议
- 获取Android原生崩溃日志:用
adb logcat连接崩溃的设备,过滤应用进程日志,直接查看崩溃时的原生错误信息——这是最直接的方式,尤其适用于Sentry还未完成初始化就崩溃的场景。 - 清理EAS构建缓存:执行
eas build android --clear-cache,避免之前安装react-native-iap残留的缓存影响构建结果。 - 调整Sentry初始化时机:把Sentry的初始化代码放在
App.js的最顶部,甚至在导入其他依赖之前,确保崩溃发生时Sentry已经完成初始化并能上报日志。 - 检查签名一致性:确认EAS构建时的签名配置和Google Play App Signing的设置是否匹配,签名不匹配可能导致应用运行时崩溃。
- 逐步回滚排查:利用Git回滚到昨天能正常运行的版本,逐步恢复代码或依赖变更,定位是哪个操作引发的问题;重点检查
react-native-iap移除后,app.json、android/app/build.gradle等配置文件是否残留相关内容。 - 测试预览构建包:用
eas build android --profile preview构建可直接安装的APK,跳过Google Play签名流程,安装到本地设备测试,排查是否是分发环节导致的崩溃。
内容的提问来源于stack exchange,提问作者AdriByMe
相关产品推荐
相关产品推荐

