RN 0.63.2升级compileSdkVersion至31后启动崩溃:找不到libhermes-executor-release.so
针对React Native 0.63.2升级compileSdkVersion到31后的崩溃解决方案
问题背景
项目基于React Native 0.63.2,原compileSdkVersion为30可正常构建,出现AAPT: error: resource android:attr/lStar not found错误后,升级compileSdkVersion和targetSdkVersion至31,编译成功但Android 13设备启动即崩溃,Logcat核心报错为java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes-executor-release.so,且已开启Hermes。
适配RN 0.63.2的解决方案
方案1:锁定兼容的Hermes版本
RN 0.63.2默认Hermes版本与compileSdk 31存在兼容性冲突,需强制指定适配版本:
- 在项目根目录
build.gradle的allprojects块中添加依赖约束:
allprojects { repositories { // 保留原有仓库配置 } configurations.all { resolutionStrategy { force 'com.facebook.hermes:hermes-engine:0.7.2' } } }
- 执行
./gradlew clean清理构建缓存,重新编译项目。
方案2:修改SoLoader初始化逻辑
RN 0.63.2的SoLoader在Android 13上的加载逻辑存在缺陷,手动指定加载的库文件:
- 打开
MainApplication.java,在onCreate方法最开头添加初始化代码:
import com.facebook.soloader.SoLoader; import java.util.Arrays; @Override public void onCreate() { super.onCreate(); // 手动指定Hermes相关库的加载顺序 SoLoader.init(this, false, Arrays.asList( "libhermes.so", "libhermes-executor-release.so" )); // 保留原有初始化代码 }
方案3:回退compileSdk到30并解决lStar错误
若升级compileSdk到31成本过高,可回退版本并通过依赖AndroidX Core库解决lStar缺失问题:
- 在
android/app/build.gradle的dependencies块中添加:
dependencies { // 保留原有依赖 implementation 'androidx.core:core:1.6.0' }
- 在项目根目录
build.gradle的allprojects块中添加约束:
allprojects { configurations.all { resolutionStrategy { force 'androidx.core:core:1.6.0' } } }
- 执行
./gradlew clean后重新构建,既保留compileSdk 30,又解决lStar错误。
验证步骤
- 执行
./gradlew clean清除构建缓存 - 重新打包APK并安装到Android 13设备
- 查看Logcat确认崩溃日志消失,应用正常启动
内容的提问来源于stack exchange,提问作者dnvarun
相关产品推荐
相关产品推荐

