
🌟 开头一句话总结
- HAP 是你最终安装到手机上的"App 包";
- HAR 是可被多个 App 共享的"动态库"(像 npm 包);
- HSP 是只能被一个 App 内部使用的"静态库"(像私有工具函数集合)。
📦 1. HAP:HarmonyOS Ability Package(能力包)
✅ 它是什么?
HAP 是 鸿蒙应用的安装单元。你可以把它理解为 Android 的 APK 或 iOS 的 IPA。
每个鸿蒙 App 至少包含一个 HAP,通常分为两种:
| 类型 | 说明 |
|---|---|
| Entry HAP | 主模块,用户点击图标启动的就是它(必须有) |
| Feature HAP | 可选功能模块,按需下载(比如"直播"、"支付"等独立功能) |
📁 文件结构示例:
css
MyApp/
├── entry/ ← Entry HAP
│ ├── src/main/
│ └── module.json5
├── feature_live/ ← Feature HAP(可选)
└── build-profile.json5
💡 关键点:
- 用户安装的是
.hap文件(实际是 ZIP 格式)。 - 一个 App 可以有多个 HAP,但只有一个 Entry。
- HAP 里包含代码、资源、配置、Ability(页面/服务)等。
🧱 2. HAR:HarmonyOS Archive(共享归档包)
✅ 它是什么?
HAR 是 可复用的共享库 ,类似 Web 开发中的 npm 包,或 Android 的 AAR。
- 多个 App 或多个 HAP 都可以引用同一个 HAR。
- 编译后生成
.har文件。 - 支持包含 TS/JS 代码、C++ 原生代码、资源文件(图片、字符串等) 。
🛠️ 什么时候用 HAR?
- 你有一套 UI 组件库(比如 Design System)要给多个项目用;
- 封装了网络请求、日志、加密等通用逻辑;
- 团队协作,需要模块解耦。
📁 创建方式(DevEco Studio):
新建模块 → 选择 "Shared Library" → 生成的就是 HAR。
⚠️ 注意限制:
- HAR 不能包含 Ability(页面/服务) ------ 它只是"工具箱",不是"应用"。
- 资源 ID 在不同 HAR 间可能冲突(建议加前缀)。
🔒 3. HSP:HarmonyOS Static Package(静态包)
✅ 它是什么?
HSP 是 仅限当前 App 内部使用的静态库,编译时会直接"合并"进主 HAP。
- 不会被其他 App 引用;
- 最终不会生成独立文件,而是"内联"到 HAP 中;
- 更安全(代码不暴露)、更轻量(无运行时开销)。
🛠️ 什么时候用 HSP?
- 工具函数、常量、私有业务逻辑,不想对外暴露;
- 追求极致性能,避免 HAR 的动态加载开销;
- 模块只在本 App 内使用,无需共享。
📁 创建方式:
新建模块 → 选择 "Static Library" → 生成 HSP。
🔁 对比总结表
| 特性 | HAP | HAR | HSP |
|---|---|---|---|
| 用途 | 应用安装包 | 共享库 | 静态私有库 |
| 能否被安装 | ✅ 是 | ❌ 否 | ❌ 否 |
| 能否包含页面(Ability) | ✅ 是 | ❌ 否 | ❌ 否 |
| 能否被多个 App 共用 | ❌ 否 | ✅ 是 | ❌ 否 |
| 编译产物 | .hap |
.har |
无独立文件(内联) |
| 创建模板 | Empty Ability | Shared Library | Static Library |
🎯 实际开发建议
- 主 App 功能 → 用 HAP(Entry + Feature);
- 跨项目复用组件/逻辑 → 用 HAR;
- 仅本项目内部工具 → 用 HSP(更安全高效);
- 不要把业务页面放进 HAR/HSP ------ 它们只能放"辅助代码"。
🧪 举个例子
假设你在开发一个电商 App:
entry→ 主 HAP(首页、商品列表)feature_cart→ 购物车 HAP(按需加载)common_ui.har→ 通用按钮、弹窗组件(多个 App 共用)utils.hsp→ 本地加密、时间格式化(仅本 App 用)
这样结构清晰,复用性强,也便于团队分工!
✅ 结语
HAP、HAR、HSP 是鸿蒙模块化开发的三大基石。
理解它们的区别,能帮你写出更规范、可维护、高性能的 HarmonyOS 应用。
📌 记住口诀:
HAP 装得下,HAR 分享它,HSP 私藏吧!