升级Expo 52与React Native 0.76后Android应用启动崩溃求助
Expo 52 + React Native 0.76 Android闪屏后崩溃问题
问题概述
将Expo升级至52版本、React Native升级至0.76版本后,iOS端运行正常,但Android应用在闪屏后直接崩溃,LogCat报错com.facebook.soloader.SoLoaderDSONotFoundError。
详细错误信息
控制台无任何报错,Expo也未显示错误界面。通过Android Studio启动应用后,LogCat输出如下致命异常:
FATAL EXCEPTION: main Process: com.myapp.app, PID: 6990 com.facebook.soloader.SoLoaderDSONotFoundError: couldn't find DSO to load: libreact_devsupportjni.so existing SO sources: SoSource 0: ApplicationSoSource[DirectorySoSource[root = /data/app/~~qKc0DTlTD-nAinarNfLR-A==/com.myapp.app-GmHt0JpTfAXh90BbDjNSoQ==/lib/arm64 flags = 0]] SoSource 1: DirectApkSoSource[root = [/data/app/~~qKc0DTlTD-nAinarNfLR-A==/com.myapp.app-GmHt0JpTfAXh90BbDjNSoQ==/base.apk!/lib/arm64-v8a]] SoSource 2: DirectorySoSource[root = /system/lib64 flags = 3] SoSource 3: DirectorySoSource[root = /vendor/lib64 flags = 3] Native lib dir: /data/app/~~qKc0DTlTD-nAinarNfLR-A==/com.myapp.app-GmHt0JpTfAXh90BbDjNSoQ==/lib/arm64 at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:1216) at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:1078) at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:943) at com.facebook.soloader.SoLoader.loadLibraryOnAndroid(SoLoader.java:859) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:842) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:812) at com.facebook.react.devsupport.DevSupportSoLoader.staticInit(DevSupportSoLoader.kt:21) at com.facebook.react.devsupport.InspectorFlags.<clinit>(InspectorFlags.kt:16) at com.facebook.react.devsupport.DevServerHelper.createBundleURL(DevServerHelper.java:408) at com.facebook.react.devsupport.DevServerHelper.createBundleURL(DevServerHelper.java:378) at com.facebook.react.devsupport.DevServerHelper.getJSBundleURLForRemoteDebugging(DevServerHelper.java:477) at com.facebook.react.devsupport.DevSupportManagerBase.getJSBundleURLForRemoteDebugging(DevSupportManagerBase.java:638) at expo.modules.devlauncher.rncompatibility.DevLauncherBridgeDevSupportManager.<init>(DevLauncherBridgeDevSupportManager.kt:50) at expo.modules.devlauncher.rncompatibility.DevLauncherDevSupportManagerFactory.create(DevLauncherDevSupportManagerFactory.kt:33) at com.facebook.react.ReactInstanceManager.<init>(ReactInstanceManager.java:275) at com.facebook.react.ReactInstanceManagerBuilder.build(ReactInstanceManagerBuilder.java:364) at com.facebook.react.ReactNativeHost.createReactInstanceManager(ReactNativeHost.java:87) at expo.modules.ReactNativeHostWrapperBase.createReactInstanceManager(ReactNativeHostWrapperBase.kt:29) at com.facebook.react.ReactNativeHost.getReactInstanceManager(ReactNativeHost.java:57) at expo.interfaces.devmenu.ReactHostWrapper.getDevSupportManager(ReactHostWrapper.kt:63) at expo.modules.devmenu.react.DevMenuPackagerCommandHandlersSwapper.swapPackagerCommandHandlers(DevMenuPackagerCommandHandlersSwapper.kt:22) at expo.modules.devmenu.DevMenuManager.setUpReactInstance(DevMenuManager.kt:111) at expo.modules.devmenu.DevMenuManager.setDelegate(DevMenuManager.kt:405) at expo.modules.devmenu.DevMenuManager.initializeWithReactHost(DevMenuManager.kt:410) at expo.modules.devmenu.DevMenuPackage$createReactActivityLifecycleListeners$1.onCreate(DevMenuPackage.kt:38) at expo.modules.ReactActivityDelegateWrapper.onCreate(ReactActivityDelegateWrapper.kt:181) at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:47) at com.myapp.app.MainActivity.onCreate(MainActivity.kt:23) at android.app.Activity.performCreate(Activity.java:9002) at android.app.Activity.performCreate(Activity.java:8980) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1526) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4030) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4235) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:112) at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:174) at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109) 2024-11-21 10:00:25.755 6990-6990 AndroidRuntime com.myapp.app E at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2636) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8705) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
推测问题源于React Native库版本不匹配,已尝试谨慎更新并选择适配的库。另外,用Expo 52创建的新项目默认使用expo-router系统,但我并未使用该系统,保留了React Navigation v6版本。新项目的package.json中有"main"字段设置为"expo-router/entry",而我的项目一直使用./App.js作为入口,不确定是否需要添加该字段。目前正在检查新的闪屏功能,可能遗漏了部分迁移步骤,寻求解决建议。
项目依赖项
"dependencies": { "@expo-google-fonts/poppins": "^0.2.3", "@expo/metro-runtime": "~4.0.0", "@expo/vector-icons": "^14.0.2", "@notifee/react-native": "^7.8.2", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-community/datetimepicker": "8.2.0", "@react-native-community/slider": "4.5.5", "@react-native-firebase/app": "^20.1.0", "@react-native-firebase/auth": "^20.1.0", "@react-native-firebase/messaging": "^20.1.0", "@react-native-google-signin/google-signin": "^11.0.1", "@react-native-picker/picker": "2.9.0", "@react-navigation/bottom-tabs": "6.3.1", "@react-navigation/drawer": "^6.6.2", "@react-navigation/elements": "1.3.3", "@react-navigation/material-bottom-tabs": "6.2.1", "@react-navigation/material-top-tabs": "6.2.1", "@react-navigation/native": "^6.1.6", "@react-navigation/stack": "^6.3.16", "crypto-js": "^4.1.1", "expo": "~52.0.7", "expo-apple-authentication": "~7.1.2", "expo-blur": "~14.0.1", "expo-build-properties": "~0.13.1", "expo-checkbox": "~4.0.0", "expo-constants": "~17.0.3", "expo-dev-client": "~5.0.3", "expo-device": "~7.0.1", "expo-font": "~13.0.1", "expo-haptics": "~14.0.0", "expo-image-picker": "~16.0.2", "expo-linear-gradient": "~14.0.1", "expo-linking": "~7.0.2", "expo-location": "~18.0.2", "expo-modules-core": "~2.0.4", "expo-notifications": "~0.29.8", "expo-splash-screen": "~0.29.11", "expo-status-bar": "~2.0.0", "expo-symbols": "~0.2.0", "expo-system-ui": "~4.0.3", "expo-web-browser": "~14.0.1", "i18next": "^22.4.15", "intl-pluralrules": "^2.0.1", "prop-types": "^15.8.1", "react": "18.3.1", "react-dom": "18.3.1", "react-hook-form": "^7.44.3", "react-i18next": "^12.2.2", "react-native": "0.76.2", "react-native-dotenv": "^3.4.8", "react-native-geocoding": "^0.5.0", "react-native-gesture-handler": "~2.20.2", "react-native-iap": "^12.13.1", "react-native-maps": "1.18.0", "react-native-modal-datetime-picker": "^18.0.0", "react-native-pager-view": "6.5.1", "react-native-paper": "^5.12.3", "react-native-progress": "^5.0.0", "react-native-ratings": "^8.1.0", "react-native-reanimated": "~3.16.1", "react-native-safe-area-context": "4.12.0", "react-native-screens": "^4.0.0", "react-native-tab-view": "^4.0.2", "react-native-toast-message": "^2.1.6", "react-native-web": "~0.19.13", "react-native-webview": "13.12.4" }
解决方案建议
- 修复SO库加载问题:
- 清理Android构建缓存:进入项目的android目录,运行
./gradlew clean,之后重新构建项目。 - 验证
expo-dev-client兼容性:当前使用版本为~5.0.3,尝试升级到Expo 52对应的最新兼容版本。 - 配置ABI过滤:在
app.json的android字段中添加"abiFilters": ["armeabi-v7a", "arm64-v8a"],限制构建架构,避免SO库缺失。
- 清理Android构建缓存:进入项目的android目录,运行
- 入口文件配置:
无需强制切换到expo-router/entry,保持./App.js作为入口即可,确保package.json中main字段设置为"./App.js",没有的话手动添加。 - 迁移步骤检查:
- 确认闪屏配置:Expo 52更新了闪屏系统,检查
expo-splash-screen的调用逻辑,确保App启动时正确执行SplashScreen.hideAsync()。 - 第三方库兼容性验证:检查
@react-native-firebase、react-native-iap等第三方库是否支持React Native 0.76和Expo 52,必要时升级到对应版本。
- 确认闪屏配置:Expo 52更新了闪屏系统,检查
- 其他尝试:
- 删除
node_modules和锁文件(package-lock.json/yarn.lock),重新执行依赖安装命令。 - 重新预构建原生项目:运行
expo prebuild --clean,同步Expo 52的原生配置。
- 删除
内容的提问来源于stack exchange,提问作者Guian
相关产品推荐
相关产品推荐

