HarmonyOS 中的 HAP、HAR、HSP
HAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry 和 feature。
- entry
应用的主模块,作为应用的入口,提供了应用的基础功能。
- feature
应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。
HarmonyOS 要求所有应用都只能有一个 entry 类型的 HAP,可以包含 0 到 多个 feature 类型的 HAP。类比在 iOS 系统中,feature 对应的是各类 Extension 类型的应用。
HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
HSP(Harmony Shared Package)是动态共享包,可以包含代码、C++库、资源和配置文件,通过HSP可以实现应用内的代码和资源的共享。HSP不支持独立发布,而是跟随其宿主应用的APP包一起发布,与宿主应用同进程,具有相同的包名和生命周期。
HAR 和 HSP 都需要依赖宿主 HAR 运行,区别在于 HAR 会被打包到每个依赖的HAP里,而 HSP 则允许多个 HAP 共享同一份代码和资源。
ohpm
ohpm 是 OpenHarmony 三方库的包管理工具,支持 OpenHarmony 共享包的发布、安装和依赖管理。
与 ohpm 工具配套的还有一个 ohpm-repo,这是一个搭建轻量级的 ohpm 私仓服务的工具。它与 ohpm 包管理器兼容,并按需缓存所有依赖项,加速私有网络中的安装。类比搭建基于 Cocoapod 的私有仓库。
一般都是采用基于私仓的第三方库管理方式。
使用 ohpm 命令
在终端命令行添加 ohpm 环境变量:
export PATH="$PATH:/{ohpm_install_path}/bin"
初始化 ohpm:
cd /{ohpm_install_path}/bin
./init
可能会提示找不到 npm 命令,则要先安装npm:
brew install node
.ohpmrc 配置文件
ohpm 从命令行和 .ohpmrc 配置文件中获取配置。配置文件位于:
- 用户级配置文件
~/.ohpm/.ohpmrc
- 项目级配置文件
在工程或 HAP 根目录的 .ohpmrc
文件。
项目级配置优先级高于用户级配置。所有配置项均是 ini 格式:<key>= <value>
的参数列表。关键配置项有:
### 仓库配置,支持配置多个地址,使用英文逗号分割。ohpm 将从配置的地址查找安装第三方库
registry=https://repo.harmonyos.com/ohpm/,https://kanchuan.com/repos/ohpm/
## 发布仓库仅支持配置一个地址
publish_registry=https://kanchuan.com/repos/ohpm/
## 用户发布三方库的发布id,从云端个人中心获取
publish_id=xxxxxxxxx
## 用户私钥文件路径,公钥需在 ohpm-repo 私仓云端进行配置
key_path=/harmony/harmony_key
oh-package.json5
将三方库发布到 ohpm-repo 仓库,必须包含 oh-package.json5` 文件,文件内容是当前三方库的元数据描述。典型的示例内容如下:
{
"name": "mylib",
"version": "0.0.1",
"description": "this is description",
"main": "src/main/ets/Index.ts",
"author": "kanchuan.com",
"license": "Apache-2.0",
"dependencies": {
"libmob.so": "file:./src/main/cpp/types/libmob"
}
}
发布共享包
配置好 .ohpmrc
配置文件的发布参数后,即可将本地打包好的 HAR 或 HSP(不能直接发布,需要配置为 release 模式后,在模块下build目录可构建 tgz 包,发布 HSP包时仅能使用 tgz 文件) 文件发布到私有仓库中。发布命令:
ohpm publish <HAR路径>
引用共享包
通过 DevEco-Studio 新建 HAP、HAR、HSP 等 project 时,默认会在 project 根目录下生成 oh-package.json5
文件,在该目录命令行执行:
ohpm i mylib
即可安装指定依赖库,并更新oh-package.json5
文件。
HAR 和 HSP 类型 Module 切换
HSP 仅支持 Release 模式打包依赖,不方便调试,在开发对接时更适合提供 HAR 版本的库。可以通过修改配置文件,切换 Module 类型为 HAR 或 HSP。
// src/main/module.json5
{
"module": {
"name": "mob",
"type": "har",//har 静态共享包模块、shared:动态共享包模块
"description": "mob",
"deviceTypes": [
"phone"
],
// "deliveryWithInstall": true,//only for hsp
}
}
// hvigorfile.ts
import { hspTasks } from '@ohos/hvigor-ohos-plugin';
import { harTasks } from '@ohos/hvigor-ohos-plugin';
export default {
//system: hspTasks,
system: harTasks,
plugins:[]
}
留言板