You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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库加载问题:
    1. 清理Android构建缓存:进入项目的android目录,运行./gradlew clean,之后重新构建项目。
    2. 验证expo-dev-client兼容性:当前使用版本为~5.0.3,尝试升级到Expo 52对应的最新兼容版本。
    3. 配置ABI过滤:在app.json的android字段中添加"abiFilters": ["armeabi-v7a", "arm64-v8a"],限制构建架构,避免SO库缺失。
  • 入口文件配置:
    无需强制切换到expo-router/entry,保持./App.js作为入口即可,确保package.json中main字段设置为"./App.js",没有的话手动添加。
  • 迁移步骤检查:
    1. 确认闪屏配置:Expo 52更新了闪屏系统,检查expo-splash-screen的调用逻辑,确保App启动时正确执行SplashScreen.hideAsync()。
    2. 第三方库兼容性验证:检查@react-native-firebase、react-native-iap等第三方库是否支持React Native 0.76和Expo 52,必要时升级到对应版本。
  • 其他尝试:
    1. 删除node_modules和锁文件(package-lock.json/yarn.lock),重新执行依赖安装命令。
    2. 重新预构建原生项目:运行expo prebuild --clean,同步Expo 52的原生配置。

内容的提问来源于stack exchange,提问作者Guian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:15:54