React Native升级Android SDK34后生产环境SoLoader崩溃求助
解决方案:React Native Android SDK34升级后Release包崩溃(SoLoader找不到so库)
1. 补全Hermes配置完整性
确认android/app/build.gradle中Hermes的Release构建配置无遗漏:
project.ext.react = [ enableHermes: true, // 确保此处为true // 其他现有配置 ] // 绑定Hermes依赖到Release构建 def enableHermes = project.ext.react.get("enableHermes", true); if (enableHermes) { implementation files("../../node_modules/hermes-engine/android/hermes-release.aar") } else { implementation jscFlavor }
2. 修正ABI过滤与打包规则
Release包缺失so库常因ABI过滤或打包规则异常,调整android/app/build.gradle:
android { defaultConfig { // 明确声明支持的ABI架构 ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } packagingOptions { // 确保优先打包Hermes相关so库 pickFirst 'lib/**/libhermes.so' pickFirst 'lib/**/libjscexecutor.so' // 禁止剥离so库的调试信息,避免加载失败 doNotStrip 'lib/**/libhermes.so' doNotStrip 'lib/**/libjscexecutor.so' } }
3. 匹配Gradle插件与Wrapper版本
你升级到com.android.tools.build:gradle:7.1.2,需对应Gradle 7.2版本,检查gradle/wrapper/gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
4. 确认Hermes初始化逻辑
检查MainApplication.java中Hermes的初始化代码是否正确:
import com.facebook.react.hermes.HermesExecutorFactory; import com.facebook.react.bridge.JavaScriptExecutorFactory; // ... @Override protected JavaScriptExecutorFactory getJSExecutorFactory() { return new HermesExecutorFactory(); }
注意不要让registerReceiver的修改影响到该方法的执行。
5. 彻底清理缓存后构建
执行以下命令避免缓存干扰:
git stash cd android ./gradlew clean ./gradlew :app:bundleRelease ./gradlew assembleRelease
6. 调整annotations依赖范围
你添加的org.jetbrains:annotations可能与RN自带依赖冲突,改为编译期依赖:
compileOnly 'org.jetbrains:annotations:16.0.2'
7. 验证APK中的so库
解压Release APK,查看lib/[对应ABI]/目录下是否存在libhermes.so和libjscexecutor.so,若不存在则需重新检查Hermes与NDK配置。
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

