OpenHarmony: HAP/HAR/HSP的区别

2024-12-18 14:58:10
132次阅读
0个评论

一、引言

在OpenHarmony应用开发领域,HAP、HAR 和 HSP 是三个关键的概念,它们在构建应用架构、实现代码复用以及优化应用性能等方面发挥着独特且重要的作用。理解它们之间的关系、各自的功能特性以及适用场景,对于开发出高效、灵活且可维护的OpenHarmony应用至关重要。

二、HAP:应用的核心构建模块

(一)基本定义与功能

HAP(HarmonyOS Ability Package)作为应用安装和运行的基本单元,是构建OpenHarmony应用的基石。它具备强大的功能,允许在配置文件中声明多种关键组件,其中包括 abilities 和 extensionAbilities 组件,这些组件是实现应用各种功能逻辑的核心部分。同时,HAP 还支持在配置文件中声明 pages 页面,从而能够构建出丰富多样的用户界面。

(二)主要使用场景

  1. Entry 模块
    • Entry 作为应用的主模块,承担着诸多重要职责。它是用户启动应用时首先接触到的部分,用于精心打造应用的入口界面,设计引人注目的入口图标,并且实现应用的主特性功能。例如,在一个社交应用中,Entry 模块负责展示登录界面、应用的主页面布局以及核心的社交功能如消息推送、好友列表展示等。
  2. Feature 模块
    • Feature 模块专注于实现应用的特定特性功能。它可以被看作是应用功能的扩展单元,能够根据应用的需求灵活添加。比如,在一个电商应用中,可能有专门的 Feature 模块用于实现商品搜索功能、购物车功能或者订单管理功能等,每个 Feature 模块都可以独立开发、测试和维护,提高了应用的可扩展性和可维护性。

三、HAR:静态共享

(一)基本定义与限制

HAR(HarmonyOS Archive)是静态共享包,其主要特点体现在编译态复用。与 HAP 不同的是,HAR 不支持在配置文件中声明 abilities 和 extensionAbilities 组件,也无法声明 pages 页面。然而,它支持 Navigation 组件导航,这为在共享包内进行页面间的跳转和交互提供了一定的便利性。

(二)主要使用场景

  1. 二方库应用
    • 当作为二方库时,HAR 可以发布到 OHPM 私仓,供公司内部其他应用依赖使用。这在企业内部开发中具有重要意义,例如,公司内部有多个应用都需要使用相同的基础数据处理逻辑或者特定的 UI 组件库,就可以将这些通用部分封装成 HAR 并发布到私仓,其他应用只需简单依赖即可使用,避免了重复开发,提高了开发效率。
  2. 三方库应用
    • 作为三方库发布到 OHPM 中心仓后,HAR 能够被更广泛的应用所依赖。

四、HSP:动态共享的优化利器

(一)基本定义与功能特点

HSP(HarmonyOS Shared Package)是动态共享包,其独特之处在于运行时复用。它不支持 abilities 和 extensionAbilities 组件的声明,但支持在配置文件中声明 pages 页面。这种特性使得 HSP 在运行时能够灵活地加载和共享页面资源。

(二)主要使用场景

  1. 代码与资源共享
    • 对于多模块共用的代码和资源,HSP 是绝佳的选择。例如,在一个大型的企业级应用中,可能有多个子模块都需要使用相同的网络请求模块、数据加密模块或者一些公共的 UI 样式资源,将这些部分封装成 HSP 后,可以在各个模块运行时动态加载和共享,大大提高了代码的可重用性,减少了应用的整体体积,同时也方便了后期的维护和升级。
  2. 元服务分包预加载
    • 在元服务架构下,HSP 可用于分包预加载。例如,在一个具有复杂功能模块的元服务应用中,可以将一些不常用但又必须存在的功能页面或者资源封装成 HSP,在应用启动时或者特定条件下进行预加载,当用户需要使用这些功能时,可以快速响应,提高了用户体验,同时也优化了应用的资源管理和性能表现。

五、三种类型的关系与选择原则

(一)关系总结

HAP 是构建应用的基本实体,是应用运行的直接载体,包含了完整的应用功能和页面构建能力。HAR 侧重于编译态的代码和资源共享,为不同应用提供静态的复用基础。HSP 则聚焦于运行时的资源共享和动态加载,特别是在多模块和元服务架构下优化应用的性能和资源利用。三者相互配合,共同构建了OpenHarmony应用的开发和复用生态。

(二)选择原则

  1. 功能完整性需求
    • 如果需要构建完整的应用功能模块,包括界面展示、功能逻辑实现以及与系统的各种交互(如应用的入口、核心功能模块等),则应选择 HAP。
  2. 编译态共享需求
    • 当有代码或资源需要在编译阶段被多个应用共享,且主要是提供一些工具类、基础数据处理或者特定的 UI 组件等非完整应用功能时,HAR 是合适的选择。
  3. 运行时共享与性能优化需求
    • 若在多模块应用中需要动态共享页面资源、优化运行时资源加载,或者在元服务架构下进行分包预加载等场景,HSP 则更为适用。
收藏00

登录 后评论。没有帐号? 注册 一个。