在 HarmonyOS 应用开发中,理解 HAP、HAR、HSP 这三种包类型是构建高质量应用的基础。本文将从概念定义、应用场景到核心区别,由浅入深地帮助你掌握这三种包类型的使用方法。


一、概念速览:一句话理解三种包类型

包类型 全称 一句话定义
HAP Harmony Ability Package 应用安装和运行的基本单元,是用户实际安装的包
HAR Harmony Archive 静态共享包,编译时打包进引用方,全量加载
HSP Harmony Shared Package 动态共享包,运行时按需加载,多模块共享一份

二、HAP:应用的基本形态

2.1 是什么

HAP(Harmony Ability Package)是应用安装和运行的基本形态,是用户从应用市场下载并安装到设备上的实际单元。

2.2 两种类型

HAP 分为两种类型:EntryFeature

HarmonyOS 应用

Entry HAP
应用主入口

Feature HAP 1
功能模块A

Feature HAP 2
功能模块B

Feature HAP 3
功能模块C

Entry(主模块)
  • 作为应用的入口,提供应用的基础功能
  • 一个 App 对于同一设备类型必须有且只有一个 Entry 类型的 HAP
  • 可独立安装运行
Feature(特性模块)
  • 作为应用能力的扩展,提供动态特性功能
  • 根据用户需求和设备类型选择性安装
  • 一个 App 可以包含零个或多个 Feature HAP

2.3 应用场景

场景示例:某电商 APP 的直播模块

某电商 APP

安装

点击直播入口

点击AR试穿

Entry: 主模块
首页/购物车/我的

Feature: 直播模块
按需加载

Feature: AR试穿
按需加载

用户

Feature 模块的三大优势

  1. 动态功能扩展:用户点击直播入口才去加载直播模块
  2. 按需加载优化:减小初始包大小,加快首次启动速度
  3. 跨设备适配:手机、车机、手表等不同设备可以加载不同的 Feature 模块

注意事项

使用 Feature 模块需要处理好加载时机依赖关系错误处理,避免因模块未下载导致功能不可用(如首次使用时的网络请求和安装时间)。


三、HAR:静态共享包

3.1 是什么

HAR(Harmony Archive)是静态共享包,可以理解为传统开发中的 SDK 依赖。HAR 在编译时会被完整打包进引用它的 HAP/HSP 中。

3.2 应用场景

  • 作为二方库,发布到 OHPM 私仓,供公司内部其他应用使用
  • 作为三方库,发布到 OHPM 中心仓,供其他应用使用

典型用例

  • 公司内部的通用工具库
  • 开源的 UI 组件库
  • 网络请求封装库

四、HSP:动态共享包

4.1 是什么

HSP(Harmony Shared Package)是动态共享包,运行时按需加载,多个模块共享同一份代码和资源。

⚠️ 重要:HSP 不支持独立发布,需要与宿主应用的 APP 包一起发布。

4.2 应用场景

  • 代码复用:多个 HAP/HSP 共用的代码和资源放在同一个 HSP 中
  • 包体优化:编译打包时只保留一份 HSP 代码和资源,有效控制应用包大小
  • 性能优化:HSP 在运行时按需加载,有助于提升应用性能
  • 组织共享:同一组织内部的多个应用之间,可以使用集成态 HSP 实现代码和资源共享

五、核心区别:HAR vs HSP

5.1 加载机制对比

对比维度 HAR(静态共享包) HSP(动态共享包)
加载方式 全量加载 按需加载
加载时机 编译时打包进 HAP 运行时动态加载
加载效率 ⚡ 更快 稍慢(需查找、加载、初始化)
包体大小 会造成代码重复 📦 更小(只保留一份)
独立发布 ✅ 支持 ❌ 不支持

5.2 形态示意图

HAR和HSP在APP包中的形态示意图

左图(HAR):每个 HAP/HSP 都包含一份完整的 HAR 代码,存在代码重复。

右图(HSP):多个 HAP 共享同一份 HSP,运行时按需加载。

5.3 如何选择?

少量模块引用

大量模块引用

需要共享代码/资源

被多少模块引用?

对加载速度要求高?

选择 HSP

选择 HAR

需要独立发布?

包体大小敏感?

选择建议

场景 推荐选择 原因
只被少数几个 HAP 引用 HAR 加载效率高,启动时已在内存中
被大量 HAP 频繁复用 HSP 节省存储空间,支持动态更新
需要独立发布到 OHPM HAR HSP 不支持独立发布
对启动速度要求极高 HAR 编译时已打包,无需运行时加载
应用包体大小敏感 HSP 只保留一份代码,有效减小包体

六、深入理解:为什么需要两种共享包?

6.1 HAR 的优势场景

HAR 在编译时就被打包到依赖它的每个 HAP 中,应用启动时就已经存在于内存中,后续使用时无需额外加载步骤,直接调用即可。

应用启动 → HAR 代码已在内存 → 直接调用 ⚡

6.2 HSP 的优势场景

HSP 是动态共享包,运行时按需加载。虽然每次使用时需要经历查找、加载、初始化的过程,但可以节省存储空间支持动态更新

应用启动 → 需要时才加载 HSP → 查找 → 加载 → 初始化 → 调用

6.3 多包引用的影响

当多个 HAP/HSP 引用相同的 HAR 时:

HSP方式

引用

引用

引用

HAP1

HSP
只有一份

HAP2

HSP1

HAR方式

包含

包含

包含

HAP1

HAR副本1

HAP2

HAR副本2

HSP1

HAR副本3

  • HAR 方式:代码重复拷贝,包体膨大,但加载效率高
  • HSP 方式:只保留一份代码,包体小,但需要运行时加载

七、总结

包类型 定位 核心特点 适用场景
HAP 应用安装单元 Entry 必须有一个,Feature 可选 应用主体和动态功能模块
HAR 静态共享包 全量加载,加载快,可独立发布 少量引用、追求速度、需独立发布
HSP 动态共享包 按需加载,包体小,不可独立发布 大量引用、追求包体优化

核心原则

  • 追求加载速度 → 选择 HAR
  • 追求包体大小 → 选择 HSP
  • 需要独立发布 → 只能选择 HAR

参考文档

Logo

赋能鸿蒙PC开发者,共建全场景原生生态,共享一次开发多端部署创新价值。

更多推荐