Expo构建的React Native应用启动页后无报错崩溃求助
针对你遇到的Expo构建的React Native应用在启动页后崩溃且无报错信息的问题,可按以下步骤排查:
检查启动屏与字体加载逻辑
你使用了多个@expo-google-fonts库,需确认expo-font的加载是否正确完成,未完成时是否错误地隐藏了启动屏。确保在useEffect中等待字体加载完成后再调用SplashScreen.hideAsync(),示例逻辑:import * as SplashScreen from 'expo-splash-screen'; import { useFonts } from 'expo-font'; import { Inter_400Regular } from '@expo-google-fonts/inter'; SplashScreen.preventAutoHideAsync(); export default function App() { const [fontsLoaded] = useFonts({ Inter_400Regular, // 其他你使用的字体 }); useEffect(() => { if (fontsLoaded) { SplashScreen.hideAsync(); } }, [fontsLoaded]); if (!fontsLoaded) { return null; } // 你的应用组件 }临时禁用代码混淆
项目中使用了obfuscator-io-metro-plugin,代码混淆可能导致运行时无法追踪的崩溃。先在metro配置中注释掉该插件,重新构建应用测试是否恢复正常。查看原生设备日志
Expo控制台可能无法捕获原生层的崩溃信息:- Android:连接设备后运行
adb logcat *:E查看错误日志 - iOS:通过Xcode打开项目的原生工程(
expo run:ios后生成的xcodeproj),在控制台查看崩溃时的报错信息
- Android:连接设备后运行
检查Firebase初始化逻辑
Firebase 9的初始化需确保在应用启动时正确完成,避免异步初始化过程中出现未处理的错误。建议将初始化代码放在App组件的useEffect中,并添加错误捕获:import { initializeApp } from 'firebase/app'; useEffect(() => { try { const firebaseConfig = { // 你的配置 }; initializeApp(firebaseConfig); } catch (error) { console.error('Firebase初始化错误:', error); } }, []);逐步移除第三方依赖排查
逐个移除可能存在兼容性问题的依赖(如react-native-chart-kit、react-native-reanimated-carousel、lottie-react-native等),每移除一个就重新构建测试,定位到导致崩溃的具体库。修复Babel依赖版本问题
你的devDependencies中babel-traverse和babylon为6.x版本,与React Native 0.71(依赖Babel 7)存在版本冲突,建议移除这两个依赖:npm uninstall babel-traverse babylon清理项目缓存
运行以下命令清理metro缓存和node_modules,重新安装依赖:expo r -c rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Miracle Obafemi

