You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动