三、鸿蒙模块划分,hap/hsp/har三种模块如何选择

前言:

在大型软件工程中,一般会伴随着多团队开发,而各个团队之间,都是弱耦合交互,团队交付的业务之间以一种契约化形式的接口,定义了业务之间的接口;而各个团队的业务独立发展,互不影响,快速迭代演进;这就需要业务模块化。在HarmonyOS应用开发中,为我们提供了hap、hsp、har三种模块划分。那么我们该怎么选择

一、hap包的选择

(1)首先hap包的定义如下

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

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

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

(2)如何选择

首先,我们看定义就知道一个app应用必须要有一个entry类型的hap包,它是应用的主模块,作为应用的入口。一般的单窗口应用,不需要额外的hap包,只需要一个Entry类型的hap+多pages的形式就能满足要求。(page可以理解为Android中的Activity,就是一个完整的页面,page之间可以通过路由进行跳转)

是否需要feature类型的hap包可以从如下两点判断:

  • 如果需要多窗口应用,比如导航/打车应用,导航功能界面和主页属于不同的功能,并且要能够作为两个任务呈现给用户,可以将该模块作为Feature类型的HAP承载相应的UIAbility组件。(可以这么认为一个UIAbility组件就是一个窗口,可以设置窗口大小适用不同的场景展示给用户)
  • 对于应用的一些拓展功能如卡片、分享业务,其不会作为单独的任务和窗口形态运行,但是由于其功能相对来说独立,并且是由系统提供的独立ExtensionAbility来承载,从更好拆分业务来考虑,也建议通过Feature类型的HAP承载单独的ExtensionAbility组件。

二、har、hsp两种包类型如何选择

1、har包与hsp的共同点

可以提高代码、资源的可重用性和可维护性,说白了就是可以将一些公共能力抽取到单独的模块中,并打包为hsp包或har包供其他模块调用,减少重复代码和维护成本。就类似java中的jar包,或者Android中的AAR包

2、har包与hsp包的不同点

har:是静态共享包,不支持按需加载,编译打包时,会全部打进引用方的hsp/hap包中。因此,如果多个hsp/hap包都引用同一个har包,会存在多份,占用的包空间比较多。但是可以节省hsp的安装和加载成本。相当于用空间换时间。且har包可以独立发布到ohpm仓库

hsp:是动态共享包,打包后会生成一个单独的.hsp的文件,如果多个模块引用该hsp,打包后也只有一份代码,一个app应用可以有多个.hsp文件,可以按需加载。但其安装和加载会有性能损失。过多的hsp可能会影响安装和App启动性能,相当于用时间换空间。hsp不支持独立发布,需要随宿主App包一起发布,与宿主应用同进程,具有相同的包名和生命周期。

3、如何选择使用hsp还是har

(1)一般如果是一个工具库组件,或者是给不同应用间去引用的公共能力,选择har包。

原因是:hsp包的版本号需要与宿主hap包版本号一致,这就导致版本演进就会出现耦合,如果需要独立演进某个功能选择har包

(2)如果需要按需加载的,比如一个功能模块,并非所有用户都会用,那么就选hsp,可以在用到时,从应用市场下载该hsp安装使用。

(3)综合app包大小,和app安装启动时长这两个方面考虑,可以这么搞,如果一个模块不会被多个地方引用的,选择har包,可以提高安装和启动性能,如果一个模块会被多个地方引用,选择hsp,可以减少包大小。比如一个模块m1,和一个模块m2都依赖har1和har2,那么可以将har1和har2包装成一个hsp,并通过hsp暴露har1和har2的接口,m1和m2都只依赖这个hsp。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值