HarmonyOS的包类型和 ohpm 包管理工具

 原创    2024-02-23

这是关于 HarmonyOS 的第二篇技术笔记,主要介绍 HarmonyOS 的包类型,以及 ohpm 包管理工具的相关知识。笔记的大部分内容在官方文档都有体现,请以官方文档为准。

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 共享同一份代码和资源。

HAR 和 HSP 的区别

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:[] 
}

相关文章:

ArkTS/JS与Native的多线程交互调用

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。