
1 -> 开发静态共享包
HAR(Harmony Archive)是静态共享包,可以包含代码、C++ 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。HAR 不同于 HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
接下来,将简单介绍库模块的工程结构,如下图所示:

相关字段的描述如下。
- libs:用于存放.so 文件。
- src > main > cpp > types:用于存放 C++ API 描述文件,子目录按照 so 维度进行划分。
- src > main > cpp > types > liblibrary > Index.d.ts:描述 C++ 接口的方法名、入参、返回参数等信息。
- src > main > cpp > types > liblibrary > oh-package.json5:描述 so 三方包声明文件入口和 so 包名信息。
- src > main > cpp > CMakeLists.txt:CMake 配置文件,提供 CMake 构建脚本。
- src > main > cpp > napi_init.cpp:共享包 C++ 代码源文件。
- Index.ets:共享包导出声明的入口。
后续将介绍如何创建库模块、如何编译共享包、如何引用共享包资源,以及如何发布共享包。
1.1 -> 创建库模块
-
鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。
-
在Choose Your Ability Template界面中,选择Static Library,并单击Next。

- 在Configure New Module界面中,设置新添加的模块信息,设置完成后,单击Finish完成创建。
- Module name:新增模块的名称。
- Device type:支持的设备类型。
- Enable native:是否创建一个用于调用 C++ 代码的模块。

创建完成后,会在工程目录中生成库模块及相关文件。

1.2 -> 编译库模块
开发完库模块后,选中模块名,然后通过 DevEco Studio 菜单栏的**Build > Make Module ${libraryName}**进行编译构建,生成 HAR。HAR 可用于工程其它模块的引用,或将 HAR 上传至 ohpm 仓库,供下载使用。若部分源码文件不需要打包至 HAR 中,可通过创建.ohpmignore 文件,配置打包时要忽略的文件/文件夹。

编译构建的 HAR 可在模块下的 build 目录下获取,包格式为*.har。

在编译构建 HAR 时,请注意以下事项:
- 编译构建 HAR 的过程中,不会将模块中的 C++ 代码直接打包进.har 文件中,而是将 C++ 代码编译成动态依赖库.so 文件放置在.har 文件中的 libs 目录下。
- 在编译构建 HAR 的过程中,会生成资源文件 ResourceTable.txt,以便编辑器可以对 HAR 中的资源文件进行联想。因此,如果不使用 DevEco Studio 对 HAR 进行构建,则 DevEco Studio 的编辑器会无法联想 HAR 中的资源。
- 如果使用的 Hvigor 为 2.5.0-s 及以上版本,在编译构建 HAR 的过程中,会将 dependencies 内处于本模块路径下的本地依赖也打包进.har 文件中;如果在打包后发现缺少部分本地依赖 (如 cpp/types 目录)。
2 -> 开发动态共享包
DevEco Studio 支持开发动态共享包 HSP(Harmony Shared Package)。在应用/元服务开发过程中部分功能按需动态下载,或开发元服务场景时需要分包加载,可使用 HSP 实现相应功能。当有多个安装包需要资源共享时,也可利用 HSP 减少公共资源和代码重复打包。
说明
- 应用内 HSP:在编译过程中与应用包名 (bundleName) 强耦合,只能给某个特定的应用使用。
- 集成态 HSP:构建、发布过程中,不与特定的应用包名耦合;使用时,工具链支持自动将集成态 HSP 的包名替换成宿主应用包名。
2.1 -> 使用约束
- HSP 及其使用方都必须是 API 10 及以上版本 Stage 模型。
- HSP 及其使用方都必须使用模块化编译模式。
2.2 -> 开发动态共享包
2.2.1 -> 创建 HSP 模块
- 通过如下两种方法,在工程中添加新的 Module。
- 方法 1:鼠标移到工程目录顶部,单击鼠标右键,选择New > Module,开始创建新的 Module。
- 方法 2:选中工程目录中任意文件,然后在菜单栏选择File > New > Module,开始创建新的 Module。
- 模板类型选择Shared Library,点击Next。

- 在Configure New Module界面中,设置新添加的模块信息,设置完成后,单击Finish完成创建。
- Module name:新增模块的名称,如设置为 sharedlibrary。
- Device type:支持的设备类型。
- Enable native:是否创建一个用于调用 C++ 代码的模块。

创建完成后,会在工程目录中生成库模块及相关文件。

2.2.2 -> 编译 HSP 模块
说明
如果 HSP 未开启混淆,则后续 HSP 被集成使用时,将不会再对 HSP 包进行混淆。
开发完库模块后,选中模块名,然后通过 DevEco Studio 菜单栏的**Build > Make Module ${libraryName}**进行编译构建,生成 HSP。

打包 HSP 时,会同时默认打包出 HAR,在模块下 build 目录下可以看到*.har 和*.hsp。

如需在应用内共享 HSP,请将 HSP 共享包上传至私仓,请先按以下操作编译生成*.tgz 包。
1. 点击工具栏图标将编译模式切换成 release 模式。

2. 选中 HSP 模块的根目录,点击 Build > Make Module ${libraryName}启动构建。

构建完成后,build 目录下生成 HSP 包产物,其中.tgz 用来上传至私仓。

3 -> 发布共享包
发布打包的 HAR,可供安装和引用。接下来将介绍如何发布 HAR 共享包。
说明
OpenHarmony 三方库中心仓仅支持 HAR 共享包发布,不支持 HSP 共享包发布。如需在应用内共享 HSP,可将 HSP 共享包发布至私仓使用。
1. 在库模块中 (与 src 文件夹同一级目录下),添加如下文件:
- 新建 README.md 文件:在 README.md 文件中必须包含包的介绍和引用方式,还可以根据包的内容添加更详细介绍。
- 新建 CHANGELOG.md 文件:填写 HAR 的版本更新记录。
- 添加 LICENSE 文件:LICENSE 许可文件。
2. 重新编译库模块,生成.har 文件。*
3. 利用工具 ssh-keygen 生成公、私钥,可执行以下命令:
ssh-keygen -m PEM -t RSA -b 4096 -f ~/.ssh_ohpm/mykey
说明
- ~/.ssh_ohpm/mykey 为私钥文件 mykey 的文件路径,按照实际情况指定。指定的私钥存储目录必须存在。
- 追加了.pub 后缀的相应公钥文件会存放在和私钥相同的目录下。
- OHPM 包管理器只支持加密密钥认证,请在生成公私钥时输入密码。
4. 登录 OpenHarmony 三方库中心仓官网,单击主页右上角的个人中心,新增 OHPM 公钥,将公钥文件 (mykey.pub) 的内容粘贴到公钥输入框中。

5. 打开命令行工具,将对应私钥文件路径配置到 .ohpmrc 文件中 key_path 字段上,可执行以下命令进行配置:
ohpm config set key_path ~/.ssh_ohpm/mykey
6. 登录 OpenHarmony 三方库中心仓官网,单击主页右上角的个人中心,复制发布码,获取发布码并配置到 .ohpmrc 文件中,可如下命令:
ohpm config set publish_id your_publish_id
7. 执行如下命令发布 HAR,<HAR 路径>需指定为.har 文件的具体路径。
ohpm publish <HAR 路径>


