Skip to main content

HAP、HAR、HSP对比

在鸿蒙(HarmonyOS/OpenHarmony)开发中,HAP、HAR、HSP 是三种核心的代码/资源交付格式,分别对应不同的应用场景和功能定位。理解它们的区别和适用场景,对模块化开发和应用部署至关重要。

一、核心概念与定位

格式全称核心定位本质
HAPHarmonyOS Ability Package应用部署包,可独立安装运行的功能单元可执行的应用包
HARHarmonyOS Archive静态资源与代码归档包,用于模块间代码复用不可独立运行的库文件
HSPHarmonyOS 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被多个应用调用)。

三、关键区别总结

维度HAPHARHSP
可独立运行是(可安装到设备)否(仅作为库被依赖)是(可被动态加载和调用)
部署形式作为应用包独立安装嵌入引用方的HAP中,不单独部署独立部署,可被多个应用共享
跨应用访问需通过跨应用接口(如RPC)不支持(仅限同一应用内依赖)支持(需配置共享权限)
包含内容Ability、代码、资源、配置代码、资源、自定义组件(无Ability)Ability、服务、代码、资源
典型用途应用的功能模块(如首页、设置)内部代码复用(工具类、组件库)跨应用能力共享(系统服务、SDK)
体积影响直接增加应用安装包体积合并到HAP中,不额外增加体积独立部署,不占用应用包体积

四、开发实践建议

  • HAP:用于拆分应用的独立功能模块(如主入口、购物车模块),支持按需打包和动态下载。
  • HAR:用于同一应用内的代码复用(如网络工具、自定义组件),适合团队内部共享基础库。
  • HSP:用于跨应用的能力共享(如系统服务、第三方SDK),需注意权限控制和版本兼容性。

通过合理搭配这三种格式,可实现鸿蒙应用的模块化开发、资源复用和跨应用协同,提升开发效率和应用性能。