【HarmonyOS NEXT】HAP/HAR/HSP

一、背景

为什么需要 HAP/HAR/HSP?

在鸿蒙开发中,随着业务复杂提升会遇到,单工程多团队并行开发冲突频繁,公共基础能力组件需要在多个App中复用,直接复制代码有些不太现实,而HAP/HAR/HSP正能够解决这些问题

二、什么是HAP/HAR/HSP?

|--------|-------------------------|------------------------------------|------------------|
| 产物 | 通俗类比 | 核心定位 | 是否可独立运行 |
| HAP | 公司最终交付的 "成品产品"(如手机、家电) | 鸿蒙应用的安装包,是最终交付给用户的产物 | 可独立安装运行 |
| HAR | 公司的 "标准化零件包"(如螺丝、芯片) | 模块归档包,用于跨工程复用代码 / 资源(不包含 Ability) | 不可独立运行,需被 HAP 依赖 |
| HSP | 公司的 "共享工具间"(如公用打印机、会议室) | 共享包,用于多 HAP 间共享代码 / 资源(支持 Ability) | 需和 HAP 一起打包部署 |

在我们的项目开发在,接触最多的是HAP和HAR,HSP使用反倒比较少

2.1、HAP

是什么?

是鸿蒙应用的安装包,是编译后的代码、资源、配置文件的集合,用户下载安装的就是HAP文件

适用场景?

所有鸿蒙应用最终交付的就是HAP包,最终是将应用的HAP包安装在设备上

2.2、HAR

是什么?

是静态共享包,相当于把 "登录模块、通用组件、工具类" 打包成一个 "零件包"------ 包含代码、资源、依赖,但不包含 Ability,只能被其他工程依赖复用,不能独立运行。

适用场景?

支持应用内共享,也可以作为二方库(SDK)、三方库(SDK)发布后供其他应用使用。

作为二方库(SDK),发布到OHPM私仓,供公司内部其他应用使用。如公司内部封装的基础工具类,发布到私仓,可以供多个app使用

作为三方库(SDK),发布到OHPM中心仓,供其他应用使用。如凡泰小程序SDK、百度地图SDK,这些是中心仓公共的,所有app都可以下载使用,没有限制

2.3、HSP

是什么?

是动态共享包,多个 HAP(如 entry HAP 和 feature HAP)可共享使用其中的代码 / 资源,支持包含 Ability,但不能独立运行。

适用场景?

多个HAP/HSP共用的代码和资源放在同一个HSP中,可以提高代码、资源的可重用性和可维护性,同时编译打包时也只保留一份HSP代码和资源,能够控制应用包的大小。

HSP在运行时按需加载,有助于提升应用性能。

同一个组织内部的多个应用之间,可以使用集成态HSP实现代码和资源的共享。

三、什么时候选哪个

开发需求 推荐产物 典型案例
交付可安装的应用给用户 HAP 电商 App、办公 App 的最终安装包
跨工程复用登录组件 / 工具类(无 Ability) HAR 登录模块 HAR、通用 UI 组件 HAR
多 HAP 共享登录 Ability / 核心资源 HSP 应用的全局用户中心 HSP
保护核心源码,只暴露接口 HAR/HSP(编译后打包) 支付核心逻辑包、加密算法包
动态加载功能模块 feature HAP + HSP 电商 App 的 "直播模块" 按需加载

四、如何打包

4.1、HAR打包

选中home模块-->选中build-->点击Make Module 'home',编译后会生成har包

har包路径:home模块-->/build/default/outputs/default/home.har

4.2、HAP打包

选中应用-->选中build-->点击Build Hap(s)/APP(s)-->Build Hap(s)

4.3、HSP打包

打包方式与HAR包打包是一样的操作,唯一区别是在创建模块时区分是hsp类型的即可

五、拓展:结合项目总结

5.1、项目实现逻辑:壳工程 + HAR 包

目前开发的项目采用 "壳工程 + 多模块 HAR" 的模式(如:登录、路由、网络、基础工具组件等模块),本质是:

代码解耦:路由/网络等模块的代码和壳工程完全分离,模块团队改代码不影响壳工程;

复用方便:如果有另一个壳工程,可以直接引用同一个首页的har包,不用重复写代码;

编译隔离:每个模块 HAR 可以单独编译、测试,再交付给壳工程,降低整体风险。

5.2、UIAbility、HAR、HAP、壳工程的关联性

UIAbility :是 首页模块的**独立功能单元(**不只是零散的 UI / 业务逻辑,而是把首页的 UI、业务逻辑、生命周期(比如 "页面打开 / 关闭")打包成一个能独立运行的功能块);

HAR :是首页模块**源代码的交付包,**方便壳工程引用

壳工程:是主工程,它的核心动作是 【依赖 / 引入首页模块的 HAR 包】然后把这些代码和自己的代码整合到一起;

壳工程运行:整合后,壳工程就能运行首页模块的 UIAbility,展示首页内容;

HAP :壳工程最终打包成的安装包,用户下载这个 HAP,就能打开 App 使用所有模块的功能。

结论、整个链路:

首页模块的UIAbility代码 → 被打包成首页模块HAR包 → 壳工程引入这个 HAR 包 → 壳工程整合所有模块代码 → 壳工程被打包成HAP安装包 → 用户安装 HAP,打开 App 就能用首页等功能。

相关推荐
搬砖的kk2 小时前
鸿蒙PC DevBox 应用开发指南
华为·harmonyos
周胡杰2 小时前
AudioPlayerManager 音视频单例播放管理类操作文档附加案例
华为·音视频·harmonyos·数据持久化·鸿蒙音视频
xianjixiance_11 小时前
Flutter跨平台三方库鸿蒙化适配指南
flutter·华为·harmonyos
夏小鱼的blog12 小时前
【HarmonyOS应用开发入门】第四期:ArkTS语言基础(二)
harmonyos·openharmony
wtrees_松阳12 小时前
【弦断九章·CPU篇】鸿蒙应用性能优化心法
华为·性能优化·harmonyos
2501_9462243113 小时前
旅行记录应用统计分析 - Cordova & OpenHarmony 混合开发实战
javascript·harmonyos·harvester
2501_9462243114 小时前
旅行记录应用外观设置 - Cordova & OpenHarmony 混合开发实战
javascript·harmonyos·harvester
TAEHENGV14 小时前
回收站模块 Cordova 与 OpenHarmony 混合开发实战
android·java·harmonyos
Nick不懂16 小时前
鸿蒙分布式KVStore冲突解决机制:原理、实现与工程化实践
harmonyos