HarmonyOS 鸿蒙Next中HSP和HAP包之间.so冲突的解决办法

HarmonyOS 鸿蒙Next中HSP和HAP包之间.so冲突的解决办法 背景描述

模块A和模块B是独立的两个模块,是两个独立的hsp包。模块A中包含了大量.so库。模块B中依赖项引入的库部分与模块A重名,即它们拥有相同的库名称但提供不同的接口,这导致在安装过程中,要么是模块A的lib覆盖了模块B的lib,要么反之,从而导致不论模块A和模块B之间是否有依赖关系,两个模块中跟冲突的.so有关的流程必有一个崩溃。

解决方法

图片

图片

如上图所示,在模块A和模块B的module.json中添加 “libIsolation”: true, 参数。 这将使模块A和模块B中的库放置在独立的文件夹内,以模块名命名,从而避免相互覆盖的问题。

结论

通过上述方法,可以有效解决不同hsp/hap包之间的.so文件冲突。


更多关于HarmonyOS 鸿蒙Next中HSP和HAP包之间.so冲突的解决办法的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,HSP和HAP包之间.so文件冲突的解决方法是:确保每个模块(HSP或HAP)使用独立的Native库路径,避免重复加载相同库。可通过配置模块的build-profile.json文件,为每个模块指定唯一的nativeLibraryPath。同时,检查依赖关系,确保不同模块引用的.so文件版本一致,或通过HSP的共享机制避免重复打包。

更多关于HarmonyOS 鸿蒙Next中HSP和HAP包之间.so冲突的解决办法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,通过为HSP或HAP模块的module.json5文件配置libIsolation: true,可以有效地解决不同包之间同名.so库的冲突问题。该配置会使每个模块的Native库(.so文件)被加载到以模块名命名的独立目录下,从而在文件系统层面实现隔离,避免安装或运行时发生覆盖。

核心操作步骤:

  1. 定位到发生冲突的模块A和模块B。
  2. 分别打开其module.json5配置文件。
  3. module对象下,添加或修改"libIsolation": true字段。
  4. 重新编译构建应用。

原理说明:libIsolation设置为false(默认值)时,所有模块的.so文件在安装后会合并到应用的libs目录中。如果出现重名,后安装的库文件会覆盖之前的,导致不可预测的行为。 设置为true后,模块的.so文件将被安装在独立的子目录下(例如 libs/{模块名}/)。系统加载器能正确识别并加载各自模块路径下的库,从根本上杜绝了覆盖。

注意事项:

  • 此配置是模块级的,需要对所有存在库冲突的模块进行设置。
  • 启用库隔离后,模块间通过Native接口(JNI)的互操作需要确保使用正确的库路径。
  • 该方案是HarmonyOS Next提供的标准解决方案,适用于HSP和HAP模块。

此方法直接、官方,能彻底解决因.so文件同名导致的覆盖与运行时崩溃问题。

回到顶部