
HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。
- HAR不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。
- HAR不支持在配置文件中声明UIAbility组件与ExtensionAbility组件。
- HAR不支持在配置文件中声明pages页面,但是可以包含pages页面,并通过命名路由的方式进行跳转。
- HAR不支持引用AppScope目录中的资源。在编译构建时,AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。
- HAR可以依赖其他HAR,但不支持循环依赖,也不支持依赖传递。


- Module name:新增模块的名称。比如:wxqcolor。
- Device type:支持的设备类型。
- Enable native:是否创建一个用于调用C++代码的模块。



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


1)验证下本地构建好的HAR包是否可以在项目中导入和使用,首先新建一个测试项目 WXQHarTest,工程目录下新建文件夹libs,并将 wxqcolor.har 包拷贝到该目录下(图中1),打开项目的oh-package.json5 添加har包的依赖(图中2和3),最后执行同步操作 Sync Now(图中4)。




{
"name": "@wxqos/wxqcolor",
"version": "1.0.0",
"description": "自定义一套颜色,直接引用即可",
"main": "Index.ets",
"author": "wxq24",
"license": "Apache-2.0",
"dependencies": {},
"compatibleSdkType": "HarmonyOS"
}
- name:HAR包名。在 ohpm 中包的命名格式为@/<package_name>或者<package_name>。其中 group 是组织,package_name 是包名。当想要上传一个含有组织(例如@wxqos/wxqcolor)的包时,在ohpm-repo中需要先创建出该组织(例如wxqos)才能进行上传。该组织名称需要审核,只有审核通过后,才能在该组织下发布包,所以要提前申请。具体的申请,请参考官方文档:组织管理。
- version:包的版本号,一般从1.0.0开始。
- description:包的描述。
- main: 定义包的主入口文件。
- author:开发者名称。
- license: 包的许可证类型。
- dependencies: 列出项目运行时必需的依赖包及其版本。

以上信息中的name、author、description,会在OpenHarmony三方库中心仓中展示。

- 新建README.md文件:在README.md文件中必须包含包的介绍和引用方式,还可以根据包的内容添加更详细介绍。

- 新建CHANGELOG.md文件:填写HAR的版本更新记录。

- 添加LICENSE文件:LICENSE许可文件。

ssh-keygen -m PEM -t RSA -b 4096 -f ~/.ssh_ohpm/mykey
在命令执行过程中,会让你输入一个密码,这个密码是后面用来上传包用的,一定要记住!!!
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
如果本地 ~/ 路径下没有隐藏文件夹.ssh_ohpm,需要先手动创建一个:cd到 ~/ 下,执行 mkdir .ssh_ohpm。 执行成功后会生成以下私钥和公钥文件:

- ~/.ssh_ohpm/mykey 为私钥文件 mykey 的文件路径,按照实际情况指定。指定的私钥存储目录必须存在。【解释:生成的mykey为私钥,存储到本地】
- 追加了.pub后缀的相应公钥文件会存放在和私钥相同的目录下。【解释:生成的mykey.pub为公钥,后面会将公钥内容复制到OpenHarmony三方库中心仓官网中个人信息下,参考步骤5】
- OHPM包管理器只支持加密密钥认证,请在生成公私钥时输入密码。【解释:就是上面说的密码,后面上传包的时候会用】
5、登录OpenHarmony三方库中心仓官网,单击主页右上角的个人中心,新增OHPM公钥,将公钥文件(mykey.pub)的内容粘贴到公钥输入框中。

公钥添加成功后显示:

执行以下命令进行配置:
ohpm config set key_path ~/.ssh_ohpm/mykey
在ohpmrc文件中会填充一条内容,表示命令执行成功:
key_path=/Users/xxx/.ssh_ohpm/mykey

7、登录OpenHarmony三方库中心仓官网,单击主页右上角的个人中心,复制发布码,获取发布码并配置到 .ohpmrc 文件中,可执行如下命令:
ohpm config set publish_id your_publish_id
执行完成后,会在步骤6中的 ohpmrc文件中会新增一条内容:
publish_id=your_publish_id
将其中的 your_publish_id 替换成你在官网复制的发布码(比如:5UABCDEFGH)即可。 也可以直接执行以下命令即可:
ohpm config set publish_id 5UABCDEFGH
ohpm publish /Users/xxx/WXQHMProject/wxqcolor/build/default/outputs/default/wxqcolor.har
终端打印以下信息就表示发布提交完成了,发布的包是需要审核的,只有审核通过后才会在OpenHarmony三方库中心仓展示:
> ohpm publish /Users/xxx/WXQHMProject/wxqcolor/build/default/outputs/default/wxqcolor.har
registry:https://ohpm.openharmony.cn/ohpm/
package:@wxqos/wxqcolor@1.0.0
=== Harball Contents ===
519B BuildProfile.ets
66B CHANGELOG.md
198B Index.ets
587B LICENSE
1004B README.md
27B ResourceTable.txt
500B build-profile.json5
0B consumer-rules.txt
234B hvigorfile.ts
93.3kB img.png
1008B obfuscation-rules.txt
300B oh-package.json5
593B src/main/module.json
274B src/main/ets/components/MainPage.ets
1.1kB src/main/ets/components/WXQColor.ets
96B src/main/resources/base/element/string.json
96B src/main/resources/en_US/element/string.json
96B src/main/resources/zh_CN/element/string.json
=== Harball Details ===
name: @wxqos/wxqcolor
version: 1.0.0
filename: @wxqos/wxqcolor-1.0.0.har
package size: 95.7 kB
unpacked size: 99.8 kB
shasum: TKIo4iIPMFmZMfG2MVlUPqH0O4U=
integrity: sha512-yEZi/38AayT9zGjJxJWJxviuB9F4F7W6O9se2Ok49CYxVGiPDRSP+1qSWjRdj9WN9N9sv3++t6pOCRJl4foqYw==
total files: 18
ohpm WARN: The HAR package to be uploaded contains source code, which may cause code asset leakage. Please abort if you do not want to procceed.
what is your passphrase of the private key: *******
+@wxqos/wxqcolor 1.0.0
Thanks for your contribution, the submitted OHPM library is under review, you can check the package status from https://ohpm.openharmony.cn/#/cn/personalCenter/package
在OpenHarmony三方库中心仓的消息中能查看到你提交的信息,以及审核结果的信息:
审核通过后,就可以在OpenHarmony三方库中心仓中搜索到了:

ohpm install @wxqos/wxqcolor
输出以下信息,即导入成功:
> ohpm install @wxqos/wxqcolor
ohpm INFO: MetaDataFetcher fetching meta info of package '@wxqos/wxqcolor' from https://ohpm.openharmony.cn/ohpm/
ohpm INFO: fetch meta info of package '@wxqos/wxqcolor' success https://ohpm.openharmony.cn/ohpm/@wxqos/wxqcolor
ohpm INFO: fetch package done 1 @wxqos/wxqcolor from https://ohpm.openharmony.cn/ohpm/@wxqos/wxqcolor/-/wxqcolor-1.0.0.har
ohpm INFO: remove useless folder succeed: "/Users/wxq/Desktop/HMApp_ArkTS/oh_modules/.ohpm/@abner+net@1.1.1/oh_modules/@abner/.DS_Store"
install completed in 0s 431ms
项目中导入成功截图:
pages引用:
import { WXQColor, firstPublicFuncColor } from '@wxqos/wxqcolor'
代码使用参考:
this.CustomText('主题-红色 firstColor', WXQColor.firstColor)
this.CustomText('文字-重要 textMajorColor', WXQColor.textMajorColor)
this.CustomText('激励、价格等高亮 textLightColor', WXQColor.textLightColor)
this.CustomText('文字-不可用 textUnableColor', WXQColor.textUnableColor)
this.CustomText('-------------------------', WXQColor.lineColor)
this.CustomText('自定义内部主颜色 firstInternalFuncColor', WXQColor.firstInternalFuncColor())
this.CustomText('自定义外部主颜色 firstPublicFuncColor', firstPublicFuncColor())
解决方案:使用命令 ohpm publish 发布HAR包的路径不对。
解决方案:发布的HAR包oh-package.json5中的信息不对,比如name。
解决方案:发布时填写的密码不对,就是生成私钥和公钥时候填写的密码。
4、ohpm ERROR: Publish failed, detail: The "main" or "types" field declare file "Index.d.ets" does not exist in package.
解决方案:发布的HAR包oh-package.json5中填写的"main": "Index.ets"不对
解决方案:发布的HAR包oh-package.json5中填写的description的长度在 6 到 512字符,重新修改即可。
6、ohpm ERROR: HttpCode 400 Failed to verify the OHPM package group. Ensure that you are a developer of the organization and the organization has been authenticated.
解决方案:发布的HAR包oh-package.json5中填写的name中所使用的group组织名(wxqos)还没有审核通过,等审核通过后再提交即可。
"name": "@wxqos/wxqcolor",
OpenHarmony三方库中心仓地址:@wxqos/wxqcolor(V1.0.0)