【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 就能用首页等功能。

相关推荐
一起养小猫7 小时前
Flutter for OpenHarmony 进阶:体育计分系统与数据持久化深度解析
flutter·harmonyos
mocoding10 小时前
flutter通信小能手pigeon三方库已完成鸿蒙化适配
flutter·华为·harmonyos
一起养小猫10 小时前
Flutter for OpenHarmony 实战:2048游戏完整开发指南
flutter·游戏·harmonyos
仓颉编程语言11 小时前
鸿蒙仓颉编程语言挑战赛一等奖作品:MeetAI-基于Cangjie的智能会后整理助手
华为·鸿蒙·仓颉编程语言
大雷神12 小时前
HarmonyOS智慧农业管理应用开发教程--高高种地--第31篇:桌面小组件开发
华为·harmonyos
一起养小猫13 小时前
Flutter for OpenHarmony 实战:排球计分系统完整开发指南
flutter·harmonyos
人工智能知识库14 小时前
华为HCCDA-AI人工智能入门级开发者题库(带详细解析)
人工智能·华为·hccda-ai题库·hccda-ai
一起养小猫15 小时前
Flutter for OpenHarmony 实战:推箱子游戏完整开发指南
flutter·游戏·harmonyos
浩宇软件开发16 小时前
基于OpenHarmony鸿蒙开发诗中华词鉴赏APP
harmonyos·arkts·arkui
仓颉编程语言17 小时前
鸿蒙仓颉编程语言挑战赛二等奖作品 :以仓颉之码,筑智慧学园——基于仓颉与OpenHarmony的智慧校园协同管控系统实践
华为·鸿蒙·仓颉编程语言