React Native安卓生产应用崩溃:无法找到libhermes.so的DSO加载文件
生产环境Android设备加载libhermes.so失败的崩溃问题
问题背景
仅生产环境出现崩溃,开发机、真机、模拟器均无法复现。Firebase Crashlytics记录到该崩溃发生在OnePlus 8 Pro和Nexus 5X机型上,但Nexus 5X模拟器运行正常。
崩溃日志
Fatal Exception: java.lang.UnsatisfiedLinkError couldn't find DSO to load: libhermes.so SoSource 0: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-main flags = 1] SoSource 1: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-0 flags = 1] SoSource 2: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-1 flags = 1] SoSource 3: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-2 flags = 1] SoSource 4: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-3 flags = 1] SoSource 5: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-4 flags = 1] SoSource 6: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-5 flags = 1] SoSource 7: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-6 flags = 1] SoSource 8: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-7 flags = 1] SoSource 9: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-8 flags = 1] SoSource 10: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-9 flags = 1] SoSource 11: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-10 flags = 1] SoSource 12: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-11 flags = 1] SoSource 13: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-12 flags = 1] SoSource 14: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-13 flags = 1] SoSource 15: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-14 flags = 1] SoSource 16: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-15 flags = 1] SoSource 17: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-16 flags = 1] SoSource 18: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-17 flags = 1] SoSource 19: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-18 flags = 1] SoSource 20: com.facebook.soloader.ApkSoSource[root = /data/data/com.hzppapp/lib-19 flags = 1] SoSource <truncated: 6863 chars>
package.json 内容
{ "name": "xxx", "version": "2.3.2", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios --simulator='iPhone 15 Pro'", "start": "react-native start", "test": "jest", "lint": "eslint . --ext .js,.jsx,.ts,.tsx" }, "dependencies": { "@gorhom/bottom-sheet": "^4.6.0", "@react-native-async-storage/async-storage": "^1.17.11", "@react-native-firebase/analytics": "^18.8.0", "@react-native-firebase/app": "^18.8.0", "@react-native-firebase/crashlytics": "^18.8.0", "@react-native-firebase/database": "^18.8.0", "@react-navigation/native": "^6.1.1", "@react-navigation/native-stack": "^6.9.7", "axios": "^1.2.2", "react": "18.1.0", "react-native": "0.70.6", "react-native-base64": "^0.2.1", "react-native-date-picker": "^4.2.6", "react-native-device-info": "^10.11.0", "react-native-gesture-handler": "^2.14.1", "react-native-google-mobile-ads": "^10.3.2", "react-native-in-app-review": "^4.2.1", "react-native-linear-gradient": "^2.6.2", "react-native-reanimated": "2.17.0", "react-native-safe-area-context": "^4.4.1", "react-native-screens": "^3.18.2", "react-native-searchable-dropdown": "^1.1.3", "react-native-svg": "^13.6.0", "react-native-webview": "^13.6.2", "recoil": "^0.7.6" }, "devDependencies": { "@babel/core": "^7.12.9", "@babel/runtime": "^7.12.5", "@react-native-community/eslint-config": "^2.0.0", "@tsconfig/react-native": "^2.0.2", "@types/base-64": "^1.0.2", "@types/jest": "^26.0.23", "@types/react": "^18.0.21", "@types/react-native": "^0.70.6", "@types/react-native-base64": "^0.2.2", "@types/react-test-renderer": "^18.0.0", "@typescript-eslint/eslint-plugin": "^5.37.0", "@typescript-eslint/parser": "^5.37.0", "babel-jest": "^26.6.3", "eslint": "^7.32.0", "jest": "^26.6.3", "metro-react-native-babel-preset": "0.72.3", "react-test-renderer": "18.1.0", "typescript": "^4.8.3" }, "jest": { "preset": "react-native", "moduleFileExtensions": [ "ts", "tsx", "js", "jsx", "json", "node" ] } }
解决方案
1. 检查ABI拆分配置
生产打包若开启ABI拆分,需确保目标机型对应的ABI库被正确打包。在android/app/build.gradle中确认:
android { splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' universalApk true } } }
开启universalApk可生成包含所有ABI库的通用安装包,避免机型适配遗漏。
2. 调整Soloader加载逻辑
修改android/app/src/main/java/com/[你的包名]/MainApplication.java,手动指定库加载路径:
import com.facebook.soloader.SoLoader; @Override public void onCreate() { super.onCreate(); SoLoader.init(this, false); try { SoLoader.loadLibrary("hermes"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } }
3. 清理缓存后重新打包
执行以下命令彻底清理构建缓存并重新生成签名包:
cd android && ./gradlew clean ./gradlew assembleRelease
检查输出APK的lib/目录下是否包含对应ABI的libhermes.so文件。
4. 确认Hermes启用状态
在android/app/build.gradle中确保Hermes已启用:
project.ext.react = [ enableHermes: true ]
若曾切换过Hermes引擎,缓存残留可能导致打包异常,需清理后重新构建。
5. 老旧机型兼容处理
Nexus 5X系统版本较低,可尝试:
- 升级react-native到0.70.x系列最新补丁版
- 在
AndroidManifest.xml的<application>标签中添加android:extractNativeLibs="true",确保Native库被正确解压
内容的提问来源于stack exchange,提问作者Matko Setnik
相关产品推荐
相关产品推荐

