news 2026/4/15 12:48:19

HarmonyOS应用包类型详解-HAP、HAR、HSP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS应用包类型详解-HAP、HAR、HSP

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


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

包类型全称一句话定义
HAPHarmony Ability Package应用安装和运行的基本单元,是用户实际安装的包
HARHarmony Archive静态共享包,编译时打包进引用方,全量加载
HSPHarmony 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):每个 HAP/HSP 都包含一份完整的 HAR 代码,存在代码重复。

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

5.3 如何选择?

少量模块引用

大量模块引用

需要共享代码/资源

被多少模块引用?

对加载速度要求高?

选择 HSP

选择 HAR

需要独立发布?

包体大小敏感?

选择建议

场景推荐选择原因
只被少数几个 HAP 引用HAR加载效率高,启动时已在内存中
被大量 HAP 频繁复用HSP节省存储空间,支持动态更新
需要独立发布到 OHPMHARHSP 不支持独立发布
对启动速度要求极高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

参考文档

  • 【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解
  • 应用程序包开发与使用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 15:10:51

恢复MEGA8:原来识USBASP的时钟问题

简 介: : 本文探讨了USBASP模块在配置Mega8单片机熔丝时出现的问题。当Mega8设置为内部RC时钟时,USBASP无法访问单片机,疑似"烧死"。通过自制SPI编程器成功恢复了单片机功能,验证问题源于USBASP无法将时钟频…

作者头像 李华
网站建设 2026/4/11 4:40:28

ThingsBoard - 断线后电量累加的解释

由于昨天断网,今天恢复。客户反映昨天的电量没有加到今天的数据上来。因为默认的柱形图,日期跨度太长,看得不明显,只能看到9号和10号都用了电。需要把时间缩短点,时间窗口选择最近一天,这会显示昨天这个时候…

作者头像 李华
网站建设 2026/4/10 18:00:02

【计算机毕业设计案例】基于springboot的企业人事管理系统基于Spring Boot+Vue的人事管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/10 15:50:11

Java计算机毕设之基于Spring Boot+Vue的人事管理系统基于springboot的企业人事管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华