鸿蒙原生APP开发学习(三)-多模块创建及跨模块页面跳转

2,753 阅读4分钟

鸿蒙多模块开发

在开发态,一个应用包含一个或者多个Module。Module是HarmonyOS应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。

Module分为“Ability”和“Library”两种类型:

  • “Ability”类型的Module对应于编译后的HAP(Harmony Ability Package)
  • “Library”类型的Module对应于HAR(Harmony Archive),或者HSP(Harmony Shared Package)

HAP(Harmony Ability Package)

HAP是HarmonyOS应用安装的基本单位,包含了编译后的代码、资源、三方库及配置文件。HAP可分为Entry和Feature两种类型。

  • Entry类型的HAP:是应用的主模块,在module.json5配置文件中的type标签配置为entry类型。在同一个应用中,同一设备类型只支持一个Entry类型的HAP,通常用于实现应用的入口界面、入口图标、主特性功能等。
  • Feature类型的HAP:是应用的动态特性模块,在module.json5配置文件中的type标签配置为feature类型。一个应用程序包可以包含一个或多个Feature类型的HAP,也可以不包含;Feature类型的HAP通常用于实现应用的特性功能,可以配置成按需下载安装,也可以配置成随Entry类型的HAP一起下载安装.

创建HAP模块

  1. 鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。
  2. Choose Your Ability Template界面中,选择Empty Ability,并单击Next

HAR(Harmony Archive)静态共享包

HAR可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

创建HAR模块

  1. 鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。
  2. Choose Your Ability Template界面中,选择Static Library,并单击Next

HSP(Harmony Shared Package)动态共享包

应用内HSP指的是专门为某一应用开发的HSP,只能被该应用内部其他HAP/HSP使用,用于应用内部代码、资源的共享。

应用内HSP跟随其宿主应用的APP包一起发布,与该宿主应用具有相同的包名和生命周期。

创建HSP模块

  1. 鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。
  2. Choose Your Ability Template界面中,选择Shared Library,并单击Next

HAR与HSP区别

HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。

image.png

HSP旨在解决HAR存在的几个问题

  • 多个HAP引用相同的HAR,导致的APP包大小膨胀问题。
  • 多个HAP引用相同的HAR,HAR中的一些状态变量无法共享的问题。

HSP的一些约束

  • HSP及其使用方都必须是Stage模型。
  • HSP及其使用方都必须使用esmodule编译模式。
  • HSP不支持在配置文件中声明abilities、extensionAbilities标签。

HAR优势

HAR能对外使用,但HAR不能有page,HSP只能对内,对外就得提供源码。

模块间页面如何跳转

如果想在模块A跳转模块B的某个页面,通过router.pushUrl({url: "xxx"})

url路径需要按照以下格式拼接:

@bundle:包名(bundleName)/模块名(moduleName)/页面相对路径(以main文件夹为起点))

例如:@bundle:com.xxx.xxx/debug/ets/pages/Index

总结

如果做组件化模块化的话,建议使用多HAP+多HSP方式,feature模块,例如登陆,主页,个人信息等使用HAP。 网络模块,日志模块等多个模块共用的使用HSP,避免使用HAR, 防止包过大。