HAP、HAR、HSP对比
在鸿蒙(HarmonyOS/OpenHarmony)开发中,HAP、HAR、HSP 是三种核心的代码/资源交付格式,分别对应不同的应用场景和功能定位。理解它们的区别和适用场景,对模块化开发和应用部署至关重要。
一、核心概念与定位
| 格式 | 全称 | 核心定位 | 本质 |
|---|---|---|---|
| HAP | HarmonyOS Ability Package | 应用部署包,可独立安装运行的功能单元 | 可执行的应用包 |
| HAR | HarmonyOS Archive | 静态资源与代码归档包,用于模块间代码复用 | 不可独立运行的库文件 |
| HSP | HarmonyOS Shared Package | 动态共享包,支持跨应用动态调用的共享能力 | 可动态加载的共享库 |
二、详细对比:功能、特点与场景
1. HAP(应用部署包)
核心功能:作为鸿蒙应用的最小部署单元,包含Ability(应用组件)、页面、资源及配置,是应用安装到设备上的实际载体。
特点:
- 可独立运行:每个HAP对应一个可安装的功能模块(如主应用入口、独立的功能页),有自己的生命周期和权限配置。
- 包含完整资源:集成代码、UI布局、图片、字符串等所有运行所需资源。
- 与Module关联:Entry Module和Feature Module编译后可生成HAP(主Module生成主HAP,Feature Module可生成独立HAP或合并到主HAP)。
- 签名要求:必须经过签名才能安装到设备,确保安全性。
适用场景:
- 应用的主入口(如Entry HAP,承载首页和核心功能)。
- 可独立部署的扩展功能(如动态下载的支付HAP、插件HAP)。
- 多设备适配(如同一应用针对手机和平板生成不同HAP)。
2. HAR(静态归档包)
核心功能:用于代码和资源的静态复用,是Module(尤其是Library Module)的编译产物,供其他Module依赖引用。
特点:
- 不可独立运行:仅作为库文件被其他Module依赖,编译时会被嵌入到引用它的HAP中,不单独部署。
- 内容纯静态:包含代码(.class/.abc字节码)、资源(图片、样式等)、自定义组件,但无Ability(不可定义独立页面入口)。
- 编译时合并:被依赖时,其代码和资源会被合并到引用方的HAP中,不增加额外的部署包体积(避免重复打包)。
- 适用本地依赖:通常作为本地库被其他Module直接依赖,不支持跨应用共享。
适用场景:
- 通用工具类库(如网络请求、数据解析、加密工具)。
- 自定义组件库(如按钮、表单等UI组件的封装)。
- 同一应用内的代码复用(如多个Feature Module共用一套数据模型)。
3. HSP(动态共享包)
核心功能:提供跨应用的动态共享能力,允许一个应用将功能或资源以HSP形式发布,其他应用可动态加载并调用其能力,无需预编译依赖。
特点:
- 跨应用共享:支持不同应用(不同bundle)通过接口调用HSP中的功能,实现能力复用(如系统提供的支付HSP,被多个应用调用)。
- 动态加载:应用运行时可按需加载HSP,无需打包到自身HAP中,减少应用体积。
- 包含可执行代码:可包含Ability、服务、资源,有独立的生命周期。
- 需配置共享权限:在
module.json5中声明shared属性,明确可被哪些应用访问。
适用场景:
- 系统级共享能力(如鸿蒙的相机服务、位置服务以HSP形式提供)。
- 第三方SDK的动态集成(如地图SDK以HSP形式发布,应用按需加载)。
- 多应用协同场景(如办公套件中,文档编辑HSP被多个应用调用)。
三、关键区别总结
| 维度 | HAP | HAR | HSP |
|---|---|---|---|
| 可独立运行 | 是(可安装到设备) | 否(仅作为库被依赖) | 是(可被动态加载和调用) |
| 部署形式 | 作为应用包独立安装 | 嵌入引用方的HAP中,不单独部署 | 独立部署,可被多个应用共享 |
| 跨应用访问 | 需通过跨应用接口(如RPC) | 不支持(仅限同一应用内依赖) | 支持(需配置共享权限) |
| 包含内容 | Ability、代码、资源、配置 | 代码、资源、自定义组件(无Ability) | Ability、服务、代码、资源 |
| 典型用途 | 应用的功能模块(如首页、设置) | 内部代码复用(工具类、组件库) | 跨应用能力共享(系统服务、SDK) |
| 体积影响 | 直接增加应用安装包体积 | 合并到HAP中,不额外增加体积 | 独立部署,不占用应用包体积 |
四、开发实践建议
- HAP:用于拆分应用的独立功能模块(如主入口、购物车模块),支持按需打包和动态下载。
- HAR:用于同一应用内的代码复用(如网络工具、自定义组件),适合团队内部共享基础库。
- HSP:用于跨应用的能力共享(如系统服务、第三方SDK),需注意权限控制和版本兼容性。
通过合理搭配这三种格式,可实现鸿蒙应用的模块化开发、资源复用和跨应用协同,提升开发效率和应用性能。