鸿蒙中 HAR/HSP 共享包的引用方式

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、三方 HAR 引用方式

支持三种引用方式:

  1. 从 ohpm 仓库安装(远程仓库)

  2. 从本地文件夹安装(本地模块源码)

  3. 从本地压缩包安装(本地 HAR/HSP 包)

二、仓库配置与设置

2.1 配置仓库地址

在 Terminal 中执行:

ohpm config set registry your_registry1,your_registry2

说明

  • 支持配置多个仓库地址,用英文逗号分隔

  • DevEco Studio 默认使用 OpenHarmony 三方库中心仓

  • 首次配置环境变量后需要重启 DevEco Studio

2.2 依赖配置方式

方式一:可视化界面
  • 菜单栏:Tools > OHPM Index

  • 进入内置的 OpenHarmony 开源中心仓

  • 可视化选择和管理三方包

方式二:命令行安装
# 切换到目标模块目录
cd path/to/your/project/entry
# 安装指定包
ohpm install @ohos/animations

效果:自动在 oh-package.json5 中添加依赖

方式三:手动配置依赖

在模块的 oh-package.json5 中:

"dependencies": {
  "@ohos/animations": "^2.1.0"
}

配置后需要执行:

ohpm install

三、引用本地模块源码

前提:本地模块必须与宿主模块属于同一个工程

方式一:命令行安装
cd path/to/your/project/main
ohpm install ../common-utils
方式二:手动配置

在 oh-package.json5 中:

"dependencies": {
  "common-utils": "file:../common-utils"
}

然后执行:

ohpm install

说明:路径可以是绝对路径或相对于当前 oh-package.json5 的相对路径

四、引用本地 HAR/HSP 包

4.1 HAR 包引用

方式一:命令行安装
cd path/to/your/project/main
ohpm install ../libs/ui-components.har
方式二:手动配置
"dependencies": {
  "ui-components": "file:../libs/ui-components.har"
}

4.2 HSP 包引用

HSP 包是通过 HSP 模块在 release 模式下编译生成的 .tgz 文件

方式一:命令行安装
cd path/to/your/project/main
ohpm install ../output/data-service.tgz
方式二:手动配置
"dependencies": {
  "data-service": "file:../output/data-service.tgz"
}

安装执行

两种方式配置后都需要执行:

ohpm install

依赖包会安装到模块的 oh_modules 目录下

五、生命周期钩子管理

在 oh-package.json5 中可配置安装/卸载钩子:

"hooks": {
  "preInstall": "echo '开始安装依赖前执行'",
  "postInstall": "echo '依赖安装完成后执行'",
  "preUninstall": "echo '开始卸载依赖前执行'", 
  "postUninstall": "echo '依赖卸载完成后执行'"
}

说明

  • 目前只支持执行当前模块或工程的钩子

  • 不支持执行依赖包中的钩子

六、使用 OpenHarmony 开源中心仓(可视化管理)

6.1 访问方式

  • 菜单栏:Tools > OHPM Index

  • 区域限制:仅支持中国境内

6.2 主要功能

搜索与浏览
  • 左侧搜索框:按名称搜索三方包

  • 目录树分类:按功能分类浏览推荐依赖包

安装流程
  1. 选择需要的三方包

  2. 点击右上角 Install 按钮

  3. 如出现弹窗,点击 Add 将中心仓地址添加到 .ohpmrc

依赖管理
  • 查看已安装的三方包及版本信息

  • Update 按钮:更新到最新版本

  • Delete 按钮:删除已安装的三方包

智能替换

对于已使用的依赖,如果存在推荐的同类三方包:

  • Replace selected with recommended library:替换当前选中的依赖

  • Replace all with recommended libraries:一键替换文件中所有同类推荐包

七、注意事项

  1. 依赖声明位置:只在模块和工程级的 oh-package.json5 中声明的 dependencies 才会被构建系统处理

  2. HSP 包生成:HSP 的 .tgz 包需要通过 HSP 模块在 release 模式下编译生成

  3. 依赖名称规范:引用本地 HAR 时,依赖名称建议与三方包的 name 字段保持一致

  4. 路径格式:文件路径支持绝对路径或相对于当前 oh-package.json5 的相对路径

  5. 网络要求:可视化中心仓功能有区域限制,仅在中国境内可用

总结

引用和管理共享包提供了多源支持:

  • 远程仓库:通过 ohpm 命令或可视化界面安装

  • 本地源码:直接引用同一工程内的模块

  • 本地包文件:引用已编译的 HAR/HSP 包文件

管理功能:

  • 生命周期钩子

  • 可视化依赖管理

  • 版本更新和替换

  • 多仓库源配置

<think>我们之前讨论的是鸿蒙ArkTS中的LRU缓存实现,现在用户询问的是鸿蒙ArkTS中HAR包和HSP包的区别。这是一个全新的问题,需要重新组织答案。 根据鸿蒙官方文档,HARHSP都是共享包,但有不同的使用场景和特性。 </think>### 鸿蒙ArkTS中HAR包与HSP包的区别 #### 一、基本定义 | **特性** | **HAR包(静态共享包)** | **HSP包(动态共享包)** | |----------------|--------------------------------------------|--------------------------------------------| | **英文全称** | Harmony Ability Resources | Harmony Shared Package | | **包类型** | 静态共享 | 动态共享 | | **运行方式** | 编译时集成到主包中 | 运行时独立加载 | | **文件扩展名** | `.har` | `.hsp` | #### 二、核心区别 1. **代码共享方式**: - HAR:代码复制到主包,导致多份拷贝占用空间[^1] - HSP:单一实例加载,多应用共享内存中的同一份代码[^2] 2. **依赖关系**: ```mermaid graph TD A[主应用] -->|依赖| B[HAR包] A -->|动态加载| C[HSP包] D[其他应用] -->|依赖| B D -->|动态加载| C ``` 3. **资源隔离**: - HAR:资源ID冲突风险高,需手动管理命名空间 - HSP:自动资源隔离,提供独立资源路径如:`$media:icon.png`[^3] 4. **版本控制**: - HAR:强依赖指定版本,更新需重新编译主应用 - HSP:支持多版本共存,运行时动态选择版本 #### 三、工程结构对比 **HAR包示例**: ``` myLib.har ├── src/main/ets │ ├── utils │ │ └── MathUtil.ets // 工具类 ├── oh-package.json5 // 包声明 ``` **HSP包示例**: ``` myShared.hsp ├── src/main/ets │ ├── entryability │ │ └── EntryAbility.ets // 独立入口 ├── module.json5 // 动态配置 ├── resources │ └── base/media/icon.png // 隔离资源 ``` #### 四、使用场景对比 | **场景** | **推荐方案** | **原因** | |-----------------------|-------------|------------------------------------------| | 通用工具类库 | HAR | 简单轻量,无运行时开销 | | UI组件库 | HSP | 资源隔离需求,多应用共享 | | 多设备适配模块 | HSP | 运行时按设备动态加载不同实现 | | 高频更新业务模块 | HSP | 独立更新,无需重新发布主应用[^4] | #### 五、实战代码示例 **HAR调用方式**: ```typescript // 安装依赖 npm install myLib@1.0.0 --save // 导入使用 import { calculate } from 'myLib' calculate(1, 2); ``` **HSP动态加载**: ```typescript // 检查模块是否存在 import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); atManager.checkAccessToken('com.example.myshared').then(() => { // 动态加载模块 import('com.example.myshared').then((module) => { module.showCustomDialog(); }); }); ``` #### 六、性能对比 $$ \text{内存占用} = \begin{cases} n \times \text{HAR\_size} & \text{(HAR)} \\ \text{HSP\_size} & \text{(HSP)} \end{cases} $$ $$ \text{启动耗时} = \begin{cases} \text{主包加载时间} & \text{(HAR)} \\ \text{主包加载} + \text{HSP动态加载} & \text{(HSP)} \end{cases} $$ #### 七、选择建议 1. **选HAR当**: - 简单工具函数集合 - 无资源文件 - 调用频率低的小型库 2. **选HSP当**: - 包含UI组件或资源文件 - 需多应用共享 - 需热更新能力 - 模块体积较大(>1MB) #### 八、演进路径 ```mermaid graph LR A[单一应用] --> B[提取HAR工具包] B --> C[复杂模块转为HSP] C --> D[跨设备HSP共享] ``` > 注:HSP鸿蒙3.1+版本引入的特性,需API 9+支持[^5]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值