You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native动态模块与原生集成报couldn't find DSO to load: libjsc.so错误

React Native动态特性模块加载so错误修复方案

核心问题说明

你遇到的libjscexecutor.so找不到错误,本质是React Native默认的SoLoader仅支持读取base.apk内置的so库路径,拆分到动态特性模块的RN相关so不会被SoLoader自动识别,导致启动RN Activity时加载失败。

疑问解答:动态模块是否需要动态加载对应库?

需要。只有当RN相关依赖完全内置在base基础模块时,才不需要额外处理加载逻辑;如果RN所有代码和依赖都打包在单独的动态模块中,必须手动处理so加载路径:

  • 动态模块安装完成后,系统默认不会主动加载模块内的so库
  • SoLoader本身没有适配Android App Bundle动态特性的拆分路径,无法自主找到动态模块中的so文件

具体修复步骤

  • 修正so预加载逻辑:删除无效的SplitInstallHelper.loadLibrary(context, "SoLoader")调用,改成预加载RN依赖的原生so库,示例代码如下:
// 动态模块安装成功后、初始化RN之前调用
SplitInstallHelper.loadLibrary(context, "reactnativejni");
SplitInstallHelper.loadLibrary(context, "jscexecutor");
// 开启Hermes时额外添加
SplitInstallHelper.loadLibrary(context, "hermes");

系统预加载完成的so会被SoLoader优先复用,不会再触发路径查找逻辑。

  • 调整依赖配置:把base模块build.gradle中所有RN、Hermes、jsc相关的依赖声明全部移动到rnmodule动态模块的build.gradle中,base模块不要保留任何RN相关依赖,避免so重复打包或者漏打包。
  • 适配SoLoader搜索路径:在rnmodule中初始化SoLoader时,传入动态模块的so搜索源,示例代码:
SoLoader.init(
  context,
  0,
  Collections.singletonList(new SplitSoSource(context, "rnmodule", 0))
);
  • 调整打包配置:如果你的动态模块是离线分发,需要把bundleInDebug和bundleInRelease根据场景改为true,把js bundle打包到动态模块的assets目录中,避免后续出现找不到js入口的问题。

原有方案无效原因说明

  • 加载SoLoader的操作无效:SoLoader是Java类,不是so库,该调用不会产生任何加载效果
  • 切换Hermes无效果:不管使用JSC还是Hermes引擎,都需要加载对应so库,路径查找问题不解决的前提下切换引擎不会有任何改善
  • 仅移动gradle配置未生效:移动配置是必要操作,但需要配合修改so加载逻辑才能解决根因问题

内容的提问来源于stack exchange,提问作者Pranjal Khandelwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:27:03