React Native 0.58.5迁0.60.4禁用Hermes仍遇libhermes.so加载错误
React Native 0.60.4禁用Hermes后启动崩溃:找不到libhermes.so的解决方法
我之前处理过好几起RN 0.60.x版本迁移时的Hermes相关崩溃问题,你遇到的这个情况其实是版本切换后的缓存残留+配置遗漏导致的——虽然你在build.gradle里明确禁用了Hermes,但还有几个隐藏的地方没同步更新,导致App依然尝试加载Hermes的动态库。下面是具体的排查和解决步骤:
1. 彻底清理构建缓存和依赖
RN 0.60开始启用Auto-linking机制,切换Hermes后旧的构建缓存会残留Hermes相关的配置,这是最常见的诱因:
- 进入Android目录执行Gradle清理:
cd android && ./gradlew clean - 回到项目根目录,删除旧依赖和锁文件后重新安装:
rm -rf node_modules package-lock.json yarn.lock npm install # 或者 yarn install - 最后清理Android Studio的IDE缓存:点击顶部菜单
File -> Invalidate Caches / Restart...,选择"Invalidate and Restart"
2. 检查MainApplication.java的Executor配置
如果你之前启用过Hermes,RN可能自动修改了MainApplication.java里的ExecutorFactory配置,即使你禁用Hermes,代码依然会尝试初始化HermesExecutor:
- 打开
android/app/src/main/java/com/[你的包名]/MainApplication.java - 找到
createReactInstanceManager方法,确保ExecutorFactory使用的是JSC而非Hermes:@Override protected ReactInstanceManager createReactInstanceManager() { ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() // ...其他原有配置 .setJSExecutorFactory(new JSCExecutorFactory()); // 确认这里是JSCExecutorFactory,不是HermesExecutorFactory return builder.build(); } - 如果之前是
HermesExecutorFactory,直接替换成JSCExecutorFactory即可(记得顶部导入对应的类:import com.facebook.react.modules.systeminfo.JSCExecutorFactory;)
3. 检查gradle.properties的全局配置
有些情况下,android/gradle.properties里会保留全局的Hermes开关配置,会覆盖你在build.gradle里的设置:
- 打开
android/gradle.properties,确认是否存在:hermesEnabled=false - 如果之前是
true,改成false;如果没有这一行,直接添加即可
4. 确认JSC依赖正常引入
你的build.gradle配置看起来没问题,但可以手动指定JSC的具体版本来避免版本兼容问题:
- 将
def jscFlavor = 'org.webkit:android-jsc:+'改成具体版本,比如:def jscFlavor = 'org.webkit:android-jsc:241213.0.0' - 重新执行
react-native run-android,确保JSC的aar被正常下载和引入
按照上面的步骤逐一排查,尤其是清理缓存这一步,绝大多数情况下都能解决问题。我之前帮朋友处理过完全一样的场景,清理完缓存并修正MainApplication的配置后就正常启动了。
内容的提问来源于stack exchange,提问作者DanGR




