HarmonyOS 鸿蒙Next中如何解决项目中有多个相同so库的选择问题

HarmonyOS 鸿蒙Next中如何解决项目中有多个相同so库的选择问题 ├── 主hap(entry) │ ├── 依赖 A ├── model A(har) │ ├── 依赖 hsp 包 B(包含 test.so) │ └── 依赖 model C ├── model C (hsp)( │ ├──cpp │ │ ├──依赖 test.so └── build-profile.json5 指定优先选择 model C 的 test.so

项目结构 和 build-profile.json5 如上;

当前仅更新C中的test.so、头文件,entry中调用C中相关的函数,会运行报错找不到新增的方法; 只有更新 B 中的test.so才可以 ;

可以实现 选择C中的so库么? 现在看来build-profile.json5没有生效,或是配置的不正确


更多关于HarmonyOS 鸿蒙Next中如何解决项目中有多个相同so库的选择问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,可通过以下方案解决重复so库冲突问题:

  1. 在模块级build-profile.json中配置excludeSo过滤规则,指定需要排除的so文件:
"buildOption": {
  "externalNativeOptions": {
    "excludeSo": ["libduplicate.so"]
  }
}
  1. 使用prefab依赖管理,在依赖声明中通过exclude参数去除重复库:
dependencies {
  implementation("com.example:lib:1.0") {
    exclude(group: "unwanted", module: "libduplicate")
  }
}
  1. 在hvigorfile.js中配置packingOptions排除特定ABI版本的so文件:
packingOptions {
  excludeLib("armeabi-v7a/libduplicate.so")
}

更多关于HarmonyOS 鸿蒙Next中如何解决项目中有多个相同so库的选择问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中处理多个相同so库的选择问题时,您当前的配置思路是正确的,但需要注意以下几点:

  1. 确保build-profile.json5文件位于正确的模块目录下(应该是model C的目录)

  2. 配置语法需要修正,正确的格式应该是:

"buildOption": {
  "napiLib": {
    "filter": {
      "select": [
        {
          "package": "C",
          "include": ["test.so"]
        }
      ]
    }
  }
}
  1. 关键点:
  • 使用"napiLib"而不是"nativeLib"
  • 确保package名称与模块的实际名称完全一致
  • 检查so文件路径是否正确
  1. 验证方法:
  • 清理并重新构建项目
  • 检查构建日志确认so文件是否来自指定模块
  • 使用反编译工具验证最终hap包中的so文件版本

如果问题仍然存在,建议检查模块间的依赖关系是否形成循环,这可能导致构建系统无法正确解析优先级。

回到顶部