文章目录
一、HAR
1.1 简介
HAR(Harmony Archive)
是静态共享包,可以包含代码、C++库
、资源和配置文件。通过HAR
可以实现多个模块或多个工程共享ArkUI
组件、资源等相关代码。
1.2 使用场景
- 作为二方库,发布到
OHPM
私仓,供公司内部其他应用使用。 - 作为三方库,发布到
OHPM
中心仓,供其他应用使用。
1.3 约束限制
HAR
不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。HAR
不支持在配置文件中声明UIAbility
组件与ExtensionAbility
组件。HAR
不支持在配置文件中声明pages
页面,但是可以包含pages
页面,并通过命名路由的方式进行跳转。HAR
不支持引用AppScope
目录中的资源。在编译构建时,AppScope
中的内容不会打包到HAR
中,因此会导致HAR
资源引用失败。HAR
可以依赖其他HAR
,但不支持循环依赖,也不支持依赖传递。
二、HAP
2.1 简介
HAP(Harmony Ability Package)
是应用安装和运行的基本单元。HAP
包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry
和feature
。
entry
:应用的主模块,作为应用的入口,提供了应用的基础功能。feature
:应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。
应用程序包可以只包含一个基础的entry
包,也可以包含一个基础的entry
包和多个功能性的feature
包。
2.2 使用场景
- 单
HAP
场景:如果只包含UIAbility
组件,无需使用ExtensionAbility
组件,优先采用单HAP(即一个entry
包)来实现应用开发。虽然一个HAP
中可以包含一个或多个UIAbility
组件,为了避免不必要的资源加载,推荐采用"一个UIAbility+多个页面
"的方式。 - 多
HAP
场景:如果应用的功能比较复杂,需要使用ExtensionAbility
组件,可以采用多HAP(即一个entry
包+多个feature
包)来实现应用开发,每个HAP
中包含一个UIAbility
组件或者一个ExtensionAbility
组件。在这种场景下,可能会存在多个HAP
引用相同的库文件,导致重复打包的问题。
2.3 约束限制
- 不支持导出接口和
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
签名证书一致,否则会出现安装失败的问题。
三、HSP
3.1 简介
HSP(Harmony Shared Package)
是动态共享包,可以包含代码、C++库
、资源和配置文件,通过HSP
可以实现应用内的代码和资源的共享。HSP
不支持独立发布,而是跟随其宿主应用的APP
包一起发布,与宿主应用同进程,具有相同的包名和生命周期。仅支持应用内HSP
,不支持应用间HSP
。
3.2 使用场景
- 多个
HAP/HSP
共用的代码和资源放在同一个HSP
中,可以提高代码、资源的可重用性和可维护性,同时编译打包时也只保留一份HSP
代码和资源,能够有效控制应用包大小。 HSP
在运行时按需加载,有助于提升应用性能。
3.3 约束限制
HSP
不支持在设备上单独安装/运行,需要与依赖该HSP
的HAP
一起安装/运行。HSP
的版本号必须与HAP
版本号一致。HSP
不支持在配置文件中声明UIAbility
组件与ExtensionAbility
组件。HSP
可以依赖其他HAR
或HSP
,但不支持循环依赖,也不支持依赖传递。
四、小结
简单来说:
App
是个上架概念,多个HAP
打包一起上架。HAP
是可以独立运行、分发的,HAP
不是复用的,复用的应该是HAR
。HAR
是静态共享包,每个模块依赖的话都会打包到HAP
里。