一、背景

为什么需要 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 就能用首页等功能。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐