鸿蒙har hap hsp 等包类型的区别

2024-08-01 19:07:04 浏览数 (2)

har hap hsp 等包类型的区别 HAP

概述

HAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP 包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry 和 feature。

  • entry:应用的主模块,作为应用的入口,提供了应用的基础功能。
  • feature:应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。

应用程序包可以只包含一个基础的 entry 包,也可以包含一个基础的 entry 包和多个功能性的 feature 包。

使用场景

  • 单 HAP 场景:如果只包含 UIAbility 组件,无需使用 ExtensionAbility 组件,优先采用单 HAP(即一个 entry 包)来实现应用开发。虽然一个 HAP 中可以包含一个或多个 UIAbility 组件,为了避免不必要的资源加载,推荐采用“一个 UIAbility 多个页面”的方式。
  • 多 HAP 场景:如果应用的功能比较复杂,需要使用 ExtensionAbility 组件,可以采用多 HAP(即一个 entry 包 多个 feature 包)来实现应用开发,每个 HAP 中包含一个 UIAbility 组件或者一个 ExtensionAbility 组件。在这种场景下,可能会存在多个 HAP 引用相同的库文件,导致重复打包的问题。

约束限制

  • 不支持导出接口和 ArkUI 组件,给其他模块使用。
  • 多 HAP 场景下,App Pack 包中同一设备类型的所有 HAP 中必须有且只有一个 Entry 类型的 HAP,Feature 类型的 HAP 可以有一个或者多个,也可以没有。
  • 多 HAP 场景下,同一应用中的所有 HAP 的配置文件中的 bundleName、versionCode、versionName、minCompatibleVersionCode、debug、minAPIVersion、targetAPIVersion、apiReleaseType 相同,同一设备类型的所有 HAP 对应的 moduleName 标签必须唯一。HAP 打包生成 App Pack 包时,会对上述参数配置进行校验。
  • 多 HAP 场景下,同一应用的所有 HAP、HSP 的签名证书要保持一致。上架应用市场是以 App Pack 形式上架,应用市场分发时会将所有 HAP 从 App Pack 中拆分出来,同时对其中的所有 HAP 进行重签名,这样保证了所有 HAP 签名证书的一致性。在调试阶段,开发者通过命令行或 DevEco Studio 将 HAP 安装到设备上时,要保证所有 HAP 签名证书一致,否则会出现安装失败的问题。

HAR

概述

HAR(Harmony Archive)是静态共享包,可以包含代码、C 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。

使用场景

  • 作为二方库,发布到OHPM[1]私仓,供公司内部其他应用使用。
  • 作为三方库,发布到OHPM[2]中心仓,供其他应用使用。

约束限制

  • HAR 不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。
  • HAR 不支持在配置文件中声明UIAbility[3]组件与ExtensionAbility[4]组件。
  • HAR 不支持在配置文件中声明pages[5]页面,但是可以包含 pages 页面,并通过命名路由[6]的方式进行跳转。
  • HAR 不支持引用 AppScope 目录中的资源。在编译构建时,AppScope 中的内容不会打包到 HAR 中,因此会导致 HAR 资源引用失败。
  • HAR 可以依赖其他 HAR,但不支持循环依赖,也不支持依赖传递。

HSP

概述

HSP(Harmony Shared Package)是动态共享包,可以包含代码、C 库、资源和配置文件,通过 HSP 可以实现代码和资源的共享。HSP 不支持独立发布,而是跟随其宿主应用的 APP 包一起发布,与宿主应用同进程,具有相同的包名和生命周期。

使用场景

  • 多个 HAP/HSP 共用的代码和资源放在同一个 HSP 中,可以提高代码、资源的可重用性和可维护性,同时编译打包时也只保留一份 HSP 代码和资源,能够有效控制应用包大小。
  • HSP 在运行时按需加载,有助于提升应用性能。
  • 同一个组织内部的多个应用之间,可以使用集成态 HSP 实现代码和资源的共享。

约束限制

  • HSP 不支持在设备上单独安装/运行,需要与依赖该 HSP 的 HAP 一起安装/运行。HSP 的版本号必须与 HAP 版本号一致。
  • HSP 不支持在配置文件中声明UIAbility[7]组件与ExtensionAbility[8]组件。
  • HSP 可以依赖其他 HAR 或 HSP,但不支持循环依赖,也不支持依赖传递。
  • 集成态 HSP 只支持Stage 模型[9]。
  • 集成态 HSP 需要 API12 及以上版本,使用标准化的 OHMUrl 格式

怎么理解 App、HAP、HAR 的关系

  • App 是个上架概念,多个 HAP 打包一起上架。
  • HAP 是可以独立运行、分发的,HAP 不是复用的,复用的应该是 HAR。
  • HAR 是静态共享包,每个模块依赖的话都会打包到 HAP 里。

har 主要使用场景:二方库、三方库。

HSP 主要使用场景:元服务分包预加载、按需加载。

参考

HSP[10]

HAP[11]

HAR[12]

参考资料

[1]

OHPM: https://ohpm.openharmony.cn/

[2]

OHPM: https://ohpm.openharmony.cn/

[3]

UIAbility: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-overview-V5

[4]

ExtensionAbility: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/extensionability-overview-V5

[5]

pages: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/module-configuration-file-V5#pages标签

[6]

命名路由: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-routing-V5#命名路由

[7]

UIAbility: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-overview-V5

[8]

ExtensionAbility: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/extensionability-overview-V5

[9]

Stage 模型: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-package-structure-stage-V5

[10]

HSP: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/in-app-hsp-V5

[11]

HAP: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/hap-package-V5

[12]

HAR: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/har-package-V5

0 人点赞