开发及引用共享包
开发及引用共享包
配置命令环境
在系统变量中配置环境,比如我下面得路径是这个
C:\Users\jinwa\AppData\Local\Huawei\ohpm\bin
创建库模块
1、鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。 2、在Choose Your Ability Template界面中,选择Static Library,并单击Next。

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

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

4、代码结构
library // HAR根目录
├─libs // 存放用户自定义引用的Native库,一般为.so文件
└─src
│ └─main
│ ├─cpp
│ │ ├─types // 定义Native API对外暴露的接口
│ │ │ └─liblibrary
│ │ │ ├─index.d.ts
│ │ │ └─oh-package.json5
│ │ ├─CMakeLists.txt // CMake配置文件
│ │ └─hello.cpp // C++源码文件
│ └─ets // ArkTS源码目录
│ │ └─components
│ │ └─mainpage
│ │ └─MainPage.ets
│ ├─resources // 资源目录,用于存放资源文件,如图片、多媒体、字符串等
│ └─module.json5 // 模块配置文件,包含当前HAR的配置信息
├─build-profile.json5 // Hvigor编译构建所需的配置文件,包含编译选项
├─hvigorfile.ts // Hvigor构建脚本文件,包含构建当前模块的插件、自定义任务等
├─index.ets // HAR的入口文件,一般作为出口定义HAR对外提供的函数、组件等
└─oh-package.json5 // HAR的描述文件,定义HAR的基本信息、依赖项等
5、在oh-package.json5中“main”字段定义导出文件入口。若不设置“main”字段,默认以当前目录下index.ets为入口文件,依据.ets>.ts>.js的顺序依次检索。以将ets/components/mainpage/MainPage.ets文件设置为入口文件为例:
{
...
"main": "./src/main/ets/components/mainpage/MainPage.ets",
...
}
6、在当前HAR模块的build-profile.json5中,将artifactType字段值设置为obfuscation
{
"apiType": 'stageMode',
"buildOption": {
"artifactType": "obfuscation", // 定义产物类型,obfuscation表示为使用混淆模式
...
},
...
}
7、若部分工程源文件无需构建到HAR包中,可在module目录下新建.ohpmignore文件,用于配置打包时要忽略的文件,支持正则表达式写法。将无需打包进HAR包的文件/文件夹名称写入.ohpmignore文件中。DevEco Studio构建时将过滤掉.ohpmignore文件中所包含的文件目录。

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

构建完成后,build目录下生成闭源HAR包产物,包格式为*.har。

如需将闭源包转换为开源包,请将模块级build-profile.json5中“artifactType”字段值改为“original”或直接删除(缺省为original),再次触发编译。
{
"apiType": 'stageMode',
"buildOption": {
"artifactType": "original", // original表示不使用混淆模式
...
},
...
}
在编译构建HAR时,请注意以下事项:
- 在编译构建HAR的过程中,不会将模块中的C++代码直接打包进.har文件中,而是将C++代码编译成动态依赖库.so文件放置在.har文件中的libs目录下。
- 在编译构建HAR的过程中,会生成资源文件ResourceTable.txt,以便编辑器可以对HAR中的资源文件进行联想。因此,如果不使用DevEco Studio对HAR进行构建,则DevEco Studio的编辑器会无法联想HAR中的资源。
发布HAR
发布打包的HAR,可供其他开发者安装和引用。接下来将介绍如何发布共享包。
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 your_key_path
说明:OHPM包管理器只支持加密密钥认证,请在生成公私钥时输入密码
4、登录OpenHarmony三方库中心仓官网,单击主页右上角的个人中心,新增OHPM公钥,将公钥文件(your_publicKey.pub)的内容粘贴到公钥输入框中。 5、打开命令行工具,执行如下命令设置私钥路径。
ohpm config set key_path your_key_path
6、OpenHarmony三方库中心仓,单击主页右上角的个人中心,复制发布码,获取发布码并配置到 .ohpmrc 文件中,可执行如下命令:
ohpm config set publish_id your_publish_id
7、执行如下命令发布HAR,<HAR路径>需指定为.har文件的具体路径。
ohpm publish <HAR路径>
引用HAR文件和资源
引用三方HAR,包括从仓库进行安装、从本地文件夹和本地压缩包中进行安装三种方式。
- 引用ohpm仓中的HAR,首先需要设置三方HAR的仓库信息。DevEco Studio默认仓库地址为OpenHarmony三方库中心仓,如果您需要设置自定义仓库,请在DevEco Studio的Terminal窗口执行如下命令(执行命令前,请确保将DevEco Studio中ohpm安装bin目录配置在“环境变量-系统变量-PATH”中,第一次配置环境变量后,需重启DevEco Studio):
ohpm config set registry your_registry1,your_registry2
说明:ohpm支持多个仓库地址,采用英文逗号分隔。
然后通过如下两种方式设置三方包依赖信息:
- 方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。
ohpm install @ohos/lottie
- 方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:
"dependencies": {
"@ohos/lottie": "^2.0.0"
}
依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会存储在工程的oh_modules目录下。
ohpm install
1、引用本地文件夹
在Terminal窗口中,执行如下命令进行安装,并会在oh-package.json5中自动添加依赖。
注意:这里要进入到entry目录下执行
ohpm install ../library
然后oh-package.json5中添加如下代码
{
"dependencies": {
"library": "file:../library"
}
}
在页面中引入使用
import {MainPage } from 'library'
@Entry
@Component
export default struct Home {
build() {
Column(){
MainPage()
}
}
}
2、在工程中配置
在工程的oh-package.json5中设置三方包依赖,配置示例如下:
"dependencies": {
"library": "file:../library"
}
依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会存储在工程的oh_modules目录下。
ohpm install
在页面中引入使用
import {MainPage } from 'library'
@Entry
@Component
export default struct Home {
build() {
Column(){
MainPage()
}
}
}
如果在工程中使用
"dependencies": {
"@ohos/library": "file:../library"
}
那么在页面中引入方式就会有所变更
import {MainPage } from '@ohos/library'
@Entry
@Component
export default struct Home {
build() {
Column(){
MainPage()
}
}
}
引用本地HAR包
命令行方式添加
方式一:在Terminal窗口中,执行如下命令进行安装,并会在oh-package.json5中自动添加依赖。
注意:这里要进入到entry目录下执行
ohpm install ../library.har
然后oh-package.json5中添加如下代码
{
"dependencies": {
"library": "file:../library"
}
}
在页面中引入使用
import {MainPage } from 'library'
@Entry
@Component
export default struct Home {
build() {
Column(){
MainPage()
}
}
}

工程目录添加
在工程的oh-package.json5中设置三方包依赖,配置示例如下:
"dependencies": {
"package": "file:../library.har"
}
依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会存储在工程的oh_modules目录下。
ohpm install
在页面中引入使用
import {MainPage } from 'library'
@Entry
@Component
export default struct Home {
build() {
Column(){
MainPage()
}
}
}
如果在工程中使用
"dependencies": {
"@ohos/library": "file:../library"
}
那么在页面中引入方式就会有所变更
import {MainPage } from '@ohos/library'
@Entry
@Component
export default struct Home {
build() {
Column(){
MainPage()
}
}
}
另外,在安装或卸载共享包时,可在工程的oh-package.json5文件中增加钩子设置,以管理install、uninstall命令的生命周期,配置示例如下:
"hooks": {
"preInstall": "echo 00 preInstall", // install命令执行之前
"postInstall": "echo 00 postInstall", // install命令执行之后
"preUninstall": "echo 00 preUninstall", // uninstall命令执行之前
"postUninstall": "echo 00 postUninstall" // uninstall命令执行之后
}
注意:目前只支持执行当前工程的oh-package.json5文件中hooks,不支持执行依赖中hooks。
在引用共享包时,请注意以下事项:
当前只支持在模块和工程下的oh-package.json5文件中声明dependencies依赖,才会被当做依赖使用,并在编译构建过程中进行相应的处理。