HarmonyOS 鸿蒙Next中Static Library模块中src/main/cpp目录下的文件如何打包进HAR中
HarmonyOS 鸿蒙Next中Static Library模块中src/main/cpp目录下的文件如何打包进HAR中 Static Library模块中src/main/cpp目录下的文件如何打包进HAR中
如果使用的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中,需通过以下步骤配置:
-
在模块的
oh-package.json5中声明Native依赖:
添加"nativeLibrary": "模块名"字段,确保HAR引用方能识别Native库依赖。 -
编译生成动态库(.so)或静态库(.a):
src/main/cpp中的代码需通过Native编译工具链(如CMake)编译为二进制库文件(如libexample.so),输出到build/default/intermediates/cpp目录。 -
将库文件手动放入HAR包:
将生成的.so或.a文件复制到Static Library模块的src/main/resources/lib目录(按ABI子目录分类,如arm64-v8a)。HAR打包时会自动包含该目录下的Native库。 -
在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++实现。

