1. 背景
我最近自己在使用云端一体化搞一个App,在开发过程中发现有许多地方可以封装成组件,虽然封装在本地项目已经满足需求,当时为了以后也会遇到,就打算学习一下鸿蒙的静态共享包开发和发布,这里只简述Api 9的静态共享包,动态共享包可以看鸿蒙官网,我这里就不描述了,过程差不多。
2. 介绍
HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。
3. 步骤
1. 在项目中创建一个静态的模块(静态共享包不能单独运行在设备上,只能作为应用模块的依赖项被引用)。
- Module name:新增模块的名称。
- Language:开发语言。
- Device type:支持的设备类型。
- Enable native:是否创建一个用于调用C++代码的模块。
2. 在项目中引入本地的模块,用于查看模块。
在 项目->entry->oh-package.json5 文件中,导入本地模块,然后同步一下包,最后在页面中使用即可。
当然,还有另一种方式——引入.har包,但是我不建议,因为引入.har包不方便调试查看,在查看前都需要重新打包才能同步,而引入模块的方式,会自动进行同步,便于调试查看。
3. 在库模块中(与src文件夹同级目录下)创建详细介绍、更新记录和许可文件
- README.md:文件不能为空,用于包的介绍和使用等信息
- CHANGELOG.md:文件不能为空,用于填写包的版本及更新记录
- LICENSE:文件不能为空,可以参考这个许可证
4. 配置共享包是否开源(可选步骤)
在 模块->build-profile.json5 文件中设置 artifactType 字段,默认值为 original(开源),如有需要可以设置为 obfuscation(闭源),obfuscation表示为使用混淆模式
5. 配置打包时要忽略的文件(可选步骤)
若部分工程源文件无需构建到HAR包中,可在module目录下新建.ohpmignore文件,用于配置打包时要忽略的文件,支持正则表达式写法。将无需打包进HAR包的文件/文件夹名称写入.ohpmignore文件中。DevEco Studio构建时将过滤掉.ohpmignore文件中所包含的文件目录。
6. 编译构建库模块
鼠标点击一下你要编译构建的库模块,然后选择Build,点击Make Module '模块名',构建成功之后会在 库模块->build->default->outputs->default 文件目录下生成一个.har文件
7. 发布共享包
7.1 生成公钥和私钥(类似于git的私钥),执行一下命令
(如果直接写文件名,它会默认在当前目录生成文件)
有.pub后缀的文件是公钥文件,没有后缀的则是私钥文件
OHPM包管理器只支持加密密钥认证,请在生成公私钥时输入密码。(这个密码需要记住,发布时需要用到)
ssh-keygen -m PEM -t RSA -b 4096 -f 路径+文件名
7.2 登录OpenHarmony三方库中心仓官网,单击主页右上角的个人中心,选择认证管理,新增一个公钥,将.pub后缀文件(公钥文件)的内容复制到公钥输入框中
7.3 在终端执行如下命令,设置私钥路径
ohpm config set key_path 私钥文件的绝对路径+私钥文件名
7.4 登录OpenHarmony三方库中心仓官网,单击主页右上角的个人中心,复制发布码,获取发布码并配置到 .ohpmrc 文件中,可执行如下命令
ohpm config set publish_id 发布码
7.5 执行如下命令发布HAR
ohpm publish .har文件的绝对路径+.har文件
发布成功会有如下提示
4. 常见问题
1. ohpm ERROR: Publish failed, error: Error: The key_path is empty - configure key_path in tthe .ohpmrc file
这个问题的原因是:.ohpmrc配置文件中没有设置 key_path 私钥路径,也就是7.3的步骤执行失败或者没有执行
2.
ohpm ERROR: Private key without passphrase is noot supportedohpm ERROR: You must config a encrypted private key using a non-empty passphrase.
ohpm ERROR: Publish failed, error: Error: Not supported private key这个问题的原因是:私钥没有设置密码或者不符合加密等级,参考7.1
3. key_path ohpm ERROR: The content of private key in the error.
上传时输入的密码与生成私钥时的密码不匹配
4. ohpm ERROR: HttpCode 400 No valid publicKeyfound!
在OpenHarmony三方库中心设置公钥,参考7.2
5. HttpCode 400 The OHPM package must contain a non-empty license file.
表示LICENSE文件为空,参考步骤3,填写许可认证