HarmonyOS 鸿蒙Next中Static Library模块中src/main/cpp目录下的文件如何打包进HAR中

HarmonyOS 鸿蒙Next中Static Library模块中src/main/cpp目录下的文件如何打包进HAR中 Static Library模块中src/main/cpp目录下的文件如何打包进HAR中

3 回复

如果使用的Hvigor为2.5.0-s及以上版本,在编译构建HAR的过程中,仅会将dependencies内处于本模块路径下的本地依赖打包进.har文件中,devDependencies里的依赖不会打包进.har文件中。
请将相应的本地依赖移至dependencies中,然后后重新编译。详细请参考Static Library模块中src/main/cpp目录下的文件未打包进HAR

更多关于HarmonyOS 鸿蒙Next中Static Library模块中src/main/cpp目录下的文件如何打包进HAR中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next的Static Library模块中,src/main/cpp目录下的C++源文件默认不会直接打包到HAR中。HAR主要包含ArkTS/JS API声明和TypeScript类型定义。若需将C++代码作为Native能力提供,应使用Native API Kit创建Native动态库,通过NAPI机制暴露接口给ArkTS调用。构建时需在build-profile.json5中配置native配置项,声明so库输出。最终HAR通过index.d.ts文件声明对Native能力的调用接口,实际C++实现会编译为平台特定的动态库随应用分发。

在HarmonyOS Next的Static Library模块中,src/main/cpp目录下的C/C++源文件默认不会自动打包到HAR(Harmony Archive)中,因为HAR主要用于分发ArkTS/JS API和资源文件。若要将C/C++代码包含在HAR中,需通过以下步骤配置:

  1. 在模块的oh-package.json5中声明Native依赖
    添加"nativeLibrary": "模块名"字段,确保HAR引用方能识别Native库依赖。

  2. 编译生成动态库(.so)或静态库(.a)
    src/main/cpp中的代码需通过Native编译工具链(如CMake)编译为二进制库文件(如libexample.so),输出到build/default/intermediates/cpp目录。

  3. 将库文件手动放入HAR包
    将生成的.so.a文件复制到Static Library模块的src/main/resources/lib目录(按ABI子目录分类,如arm64-v8a)。HAR打包时会自动包含该目录下的Native库。

  4. 在HAR中提供ArkTS/JS API
    通过NAPI(Native API)封装C/C++功能,使HAR使用者可通过ArkTS/JS接口调用Native能力。

注意事项

  • HAR中的Native库仅支持动态链接(.so),静态库(`.a)需确保与引用方兼容。
  • 发布HAR时,需在文档中明确说明支持的ABI架构和Native依赖。
  • 若使用第三方Native库,需遵循开源协议并打包对应版本。

通过以上配置,HAR可同时分发ArkTS/JS接口和底层C/C++实现。

回到顶部