【HarmonyOS NEXT】HAP/HAR/HSP
摘要: HAP、HAR、HSP是鸿蒙开发的三种模块化方案,分别对应应用安装包(HAP)、静态共享包(HAR)和动态共享包(HSP)。HAP是最终用户安装的产物;HAR用于跨工程复用代码(如工具类、UI组件),但不含Ability;HSP支持多HAP共享代码/资源(含Ability),可动态加载以优化性能。HAR/HSP适用于组件复用、源码保护等场景,而HSP还能控制包体积。打包时,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 就能用首页等功能。
更多推荐




所有评论(0)