HarmonyOS鸿蒙Next中如何理解App、HAP、HAR、HSP的关系
HarmonyOS鸿蒙Next中如何理解App、HAP、HAR、HSP的关系 如何理解App、HAP、HAR、HSP的关系
【问题描述】:如何理解App、HAP、HAR、HSP的关系
【问题现象】:不涉及
【版本信息】:Harmony OS
【复现代码】:不涉及
【尝试解决方案】:不涉及
App是发布到应用市场的基本单元,不能直接在设备上安装和运行。
HAP (Harmony Ability Package)是应用安装和运行的基本单元,包含代码、资源、第三方库及配置文件等,主要分为enty和feature两种类型。
HAR(Harmony Archive)是静态共享包,包含代码、C++库、资源和配置文件。HAR支持多个模块或工程共享ArKUI组件和相关代码
HSP(Harmony Shared Package)是动态共享包,包含代码、C++库、资源和配置文件,用于实现代码和资源的共享。HSP跟随宿主应用的App包一起发布,与宿主应用同进程,具有相同的包名和生命周期。
更多关于HarmonyOS鸿蒙Next中如何理解App、HAP、HAR、HSP的关系的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
- App是发布到应用市场的基本单元,不能直接在设备上安装和运行。
- HAP(Harmony Ability Package)是应用安装和运行的基本单元,包含代码、资源、第三方库及配置文件等,主要分为entry和feature两种类型。
- HAR(Harmony Archive)是静态共享包,包含代码、C++库、资源和配置文件。HAR支持多个模块或工程共享ArkUI组件和相关代码。
- HSP(Harmony Shared Package)是动态共享包,包含代码、C++库、资源和配置文件,用于实现代码和资源的共享。HSP跟随宿主应用的App包一起发布,与宿主应用同进程,具有相同的包名和生命周期。


App是应用的顶层分发单元,HAP是运行基础,HAR和HSP提供共享能力。HAR适用于静态复用(开发效率高),HSP用于动态共享(性能优、体积小),HAP实现模块化部署。合理组合它们(如Entry HAP + Feature HAP + HSP)能构建高可维护、低冗余的应用架构。例如:主题包用HSP共享,工具类用HAR,核心功能拆为多个HAP。
参考:
HAR、HSP、HAP三者的区别和使用场景-行业常见问题-公共关键技术方案-场景化知识 - 华为HarmonyOS开发者
如何理解App、HAP、HAR、HSP的关系-程序包结构-应用框架开发-开发 - 华为HarmonyOS开发者
在HarmonyOS Next中,App是最终应用包。HAP是HarmonyOS应用包,包含代码和资源,是App的组成部分。HAR是静态共享包,用于代码和资源复用,编译时链接。HSP是动态共享包,用于运行时共享,可独立编译和部署。App由一个或多个HAP构成,HAP可依赖HAR或HSP。
在HarmonyOS Next中,App、HAP、HAR、HSP是构成应用和代码复用的核心模块,它们的关系可以清晰地分层理解。
1. App(Application) App是最终用户可安装和运行的应用整体。一个App由一个或多个HAP(Harmony Ability Package)打包而成,通过App Pack(.app文件)进行分发和安装。
2. HAP(Harmony Ability Package) HAP是应用的功能模块,是Ability的部署包。它包含编译后的代码、资源、第三方库及配置文件。一个App必须包含一个Entry类型的HAP(主模块),并可包含多个Feature类型的HAP(功能模块)。这种设计支持按需下载和安装功能模块。
3. HAR(Harmony Archive) HAR是静态共享包,用于在编译时共享代码、C++库和资源。它会被完整地编译到引用它的每个HAP中,导致每个HAP的体积都包含HAR的完整副本。适用于需要紧密耦合、不介意包体积增大的公共代码模块。
4. HSP(Harmony Shared Package) HSP是动态共享包,用于在运行时共享代码和C++库(资源目前主要通过HAR共享)。它与依赖它的HAP分离编译,在设备上可被多个HAP共享同一份副本。这能有效减少应用整体体积,并支持独立更新(需遵循版本兼容性规则)。HSP又分为:
- 应用内HSP:仅供同一App内的HAP共享。
- 应用间HSP:可被其他App的HAP共享,是系统级的共享库。
核心关系总结:
- 组成关系:一个App由一个或多个HAP组成。
- 复用方式:HAR是静态复用,在编译时集成,增加每个HAP的大小;HSP是动态复用,在运行时共享,优化整体体积。
- 依赖层级:HAP可以依赖HAR或HSP来复用公共代码与库。一个HSP本身也可以依赖HAR。
- 开发视角:开发者将代码组织在HAR或HSP中,以实现模块化与复用;最终将必需的HAP打包成App进行发布。
简单来说,App是产品,HAP是功能组件,而HAR和HSP是两种不同复用机制下的代码库。选择HAR还是HSP,取决于你对包体积、耦合度和更新灵活性的权衡。

