HarmonyOS应用包类型详解-HAP、HAR、HSP
本文将从概念定义、应用场景到核心区别,由浅入深地帮助你掌握这三种包类型的使用方法。
在 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 分为两种类型:Entry 和 Feature。
Entry(主模块)
- 作为应用的入口,提供应用的基础功能
- 一个 App 对于同一设备类型必须有且只有一个 Entry 类型的 HAP
- 可独立安装运行
Feature(特性模块)
- 作为应用能力的扩展,提供动态特性功能
- 根据用户需求和设备类型选择性安装
- 一个 App 可以包含零个或多个 Feature HAP
2.3 应用场景
场景示例:某电商 APP 的直播模块
Feature 模块的三大优势:
- 动态功能扩展:用户点击直播入口才去加载直播模块
- 按需加载优化:减小初始包大小,加快首次启动速度
- 跨设备适配:手机、车机、手表等不同设备可以加载不同的 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):每个 HAP/HSP 都包含一份完整的 HAR 代码,存在代码重复。
右图(HSP):多个 HAP 共享同一份 HSP,运行时按需加载。
5.3 如何选择?
选择建议:
| 场景 | 推荐选择 | 原因 |
|---|---|---|
| 只被少数几个 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 时:
- HAR 方式:代码重复拷贝,包体膨大,但加载效率高
- HSP 方式:只保留一份代码,包体小,但需要运行时加载
七、总结
| 包类型 | 定位 | 核心特点 | 适用场景 |
|---|---|---|---|
| HAP | 应用安装单元 | Entry 必须有一个,Feature 可选 | 应用主体和动态功能模块 |
| HAR | 静态共享包 | 全量加载,加载快,可独立发布 | 少量引用、追求速度、需独立发布 |
| HSP | 动态共享包 | 按需加载,包体小,不可独立发布 | 大量引用、追求包体优化 |
核心原则:
- 追求加载速度 → 选择 HAR
- 追求包体大小 → 选择 HSP
- 需要独立发布 → 只能选择 HAR
参考文档
更多推荐



所有评论(0)