HAR(Harmony Archive)
是静态共享包,可以包含代码、C++库
、资源和配置文件。通过HAR
可以实现多个模块或多个工程共享ArkUI
组件、资源等相关代码。
OHPM
私仓,供公司内部其他应用使用。OHPM
中心仓,供其他应用使用。HAR
不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。HAR
不支持在配置文件中声明UIAbility
组件与ExtensionAbility
组件。HAR
不支持在配置文件中声明pages
页面,但是可以包含pages
页面,并通过命名路由的方式进行跳转。HAR
不支持引用AppScope
目录中的资源。在编译构建时,AppScope
中的内容不会打包到HAR
中,因此会导致HAR
资源引用失败。HAR
可以依赖其他HAR
,但不支持循环依赖,也不支持依赖传递。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
签名证书一致,否则会出现安装失败的问题。HSP(Harmony Shared Package)
是动态共享包,可以包含代码、C++库
、资源和配置文件,通过HSP
可以实现应用内的代码和资源的共享。HSP
不支持独立发布,而是跟随其宿主应用的APP
包一起发布,与宿主应用同进程,具有相同的包名和生命周期。仅支持应用内HSP
,不支持应用间HSP
。
HAP/HSP
共用的代码和资源放在同一个HSP
中,可以提高代码、资源的可重用性和可维护性,同时编译打包时也只保留一份HSP
代码和资源,能够有效控制应用包大小。HSP
在运行时按需加载,有助于提升应用性能。HSP
不支持在设备上单独安装/运行,需要与依赖该HSP
的HAP
一起安装/运行。HSP
的版本号必须与HAP
版本号一致。HSP
不支持在配置文件中声明UIAbility
组件与ExtensionAbility
组件。HSP
可以依赖其他HAR
或HSP
,但不支持循环依赖,也不支持依赖传递。简单来说:
App
是个上架概念,多个HAP
打包一起上架。HAP
是可以独立运行、分发的,HAP
不是复用的,复用的应该是HAR
。HAR
是静态共享包,每个模块依赖的话都会打包到HAP
里。