鸿蒙开发5.0【模块关系梳理】

HarmonyOS 梳理模块关系

刚开始开发的时候总是理不清鸿蒙中的模块类型和关系,今天就来梳理下鸿蒙中的模块类型

Module类型

Module按照使用场景可以分为两种类型:

  • Ability类型的Module: 用于实现应用的功能和特性。每一个Ability类型的Module编译后,会生成一个以.hap为后缀的文件,我们称其为HAP(Harmony Ability Package)包。HAP包可以独立安装和运行,是应用安装的基本单位,一个应用中可以包含一个或多个HAP包,具体包含如下两种类型。

    • entry类型的Module:应用的主模块,包含应用的入口界面、入口图标和主功能特性,编译后生成entry类型的HAP。每一个应用分发到同一类型的设备上的应用程序包,只能包含唯一一个entry类型的HAP。
    • feature类型的Module:应用的动态特性模块,编译后生成feature类型的HAP。一个应用中可以包含一个或多个feature类型的HAP,也可以不包含。
  • Library类型的Module: 用于实现代码和资源的共享。同一个Library类型的Module可以被其他的Module多次引用,合理地使用该类型的Module,能够降低开发和维护成本。Library类型的Module分为Static和Shared两种类型,编译后会生成共享包。

    • Static Library:静态共享库。编译后会生成一个以.har为后缀的文件,即静态共享包HAR(Harmony Archive)。
    • Shared Library:动态共享库。编译后会生成一个以.hsp为后缀的文件,即动态共享包HSP(Harmony Shared Package)。

    说明:

    实际上,Shared Library编译后除了会生成一个.hsp文件,还会生成一个.har文件。这个.har文件中包含了HSP对外导出的接口,应用中的其他模块需要通过.har文件来引用HSP的功能。为了表述方便,我们通常认为Shared Library编译后生成HSP

    HAR与HSP两种共享包的主要区别体现在:

    共享包类型编译和运行方式发布和引用方式
    HARHAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。HAR除了支持应用内引用,还可以独立打包发布,供其他应用引用。
    HSPHSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。HSP一般随应用进行打包,当前只支持应用内引用,不支持独立发布和跨应用的引用。

    HAR和HSP在APP包中的形态示意图(此图一目了然)

    1

相同点:HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和[配置文件

不同点:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而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签名证书一致,否则会出现安装失败的问题。
创建

下面简要介绍如何通过DevEco Studio新建一个HAP模块。

  1. 创建工程,详见[构建第一个ArkTS应用]。
  2. 在工程目录上单击右键,选择New > Module
  3. 在弹出的对话框中选择Empty Ability模板,单击Next
  4. 在Module配置界面,配置Module name,选择Module TypeDevice Type,然后单击Next
  5. 在Ability配置界面,配置Ability name,然后单击Finish完成创建。

HAR

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

使用场景
  • 作为二方库,发布到[OHPM]私仓,供公司内部其他应用使用。
  • 作为三方库,发布到[OHPM]中心仓,供其他应用使用。
约束限制
  • HAR不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。
  • HAR不支持在配置文件中声明[UIAbility]组件与[ExtensionAbility]组件。
  • HAR不支持在配置文件中声明[pages]页面,但是可以包含pages页面,并通过[命名路由]的方式进行跳转。
  • HAR不支持引用AppScope目录中的资源。在编译构建时,AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。
  • HAR可以依赖其他HAR,但不支持循环依赖,也不支持依赖传递。
创建HAR模块
  1. 鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。

  2. Choose Your Ability Template界面中,选择Static Library,并单击Next

  3. Configure New Module界面中,设置新添加的模块信息,设置完成后,单击Finish完成创建。

    • Module name:新增模块的名称。
    • Device type:支持的设备类型。
    • Enable native:是否创建一个用于调用C++代码的模块。

HSP

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,但不支持循环依赖,也不支持依赖传递。
创建HSP模块
  1. 通过如下两种方法,在工程中添加新的Module。

    • 方法1:鼠标移到工程目录顶部,单击鼠标右键,选择New > Module,开始创建新的Module。
    • 方法2:选中工程目录中任意文件,然后在菜单栏选择File > New > Module,开始创建新的Module。
  2. 模板类型选择Shared Library,点击Next

  3. Configure New Module界面中,设置新添加的模块信息,设置完成后,单击Finish完成创建。

    • Module name:新增模块的名称,如设置为sharedlibrary。
    • Device type:支持的设备类型。
    • Enable native:是否创建一个用于调用C++代码的模块。

通过DevEco Studio创建一个HSP模块,详见[创建HSP模块],我们以创建一个名为library的HSP模块为例。基本的工程目录结构如下:

library
├── src
│   └── main
│       ├── ets
│       │   └── pages
│       │       └── index.ets
│       ├── resources
│       └── module.json5
├── oh-package.json5
└── index.ets

模块依赖

做安卓开发的同学们一般处理模块与模块之间的关系,我们一般会叫“模块依赖”。鸿蒙的官网文档其实不叫这个,官方的叫法“引用共享包”。其实无所谓啦 ,大家习惯习惯就好

以下就是配置模块的共享几种情况:

  • 从仓库进行安装、

    然后通过如下两种方式设置三方包依赖信息:

    • 方式一:在Terminal窗口中,切换到需要引入三方包的模块,如entry模块,执行如下命令安装三方包,DevEco Studio会自动在该模块的oh-package.json5中自动添加三方包依赖。

      cd path/to/your/project/entryohpm install @ohos/lottie
      
    • 方式二:在需要引入三方包的模块的oh-package.json5中设置三方包依赖,配置示例如下:

      "dependencies": {  "@ohos/lottie": "^2.0.0"}
      

      依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会安装到该模块的oh_modules目录下。

      ohpm install
      
  • 从本地文件夹 ( 引用本地模块源码)

    引用本地模块源码,如entry模块需要依赖foo模块的源码,有如下两种方式:

      • 方式一:在Terminal窗口中,切换到需要引入本地模块源码的模块,即entry模块,执行如下命令进行安装,并会在该模块下的oh-package.json5中自动添加依赖。

        cd path/to/your/project/entryohpm install path/to/foo
        
      • 方式二:在需要引入本地模块源码的模块的oh-package.json5中设置源码依赖项,即entry模块的oh-package.json5中,添加如下配置:

        "dependencies": {  "folder": "file:path/to/foo" // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径}
        

        依赖设置完成后,需要执行ohpm install命令安装依赖包,模块foo的源码会安装在entry模块的oh_modules目录下。

        ohpm install
        
  • 本地压缩包中进行安装.(引用本地HAR/HSP包)

    引用本地HAR/HSP包,有如下两种方式:

    • 方式一:在Terminal窗口中,切换到需要引入本地HAR/HSP包的模块,如entry模块,执行如下命令进行安装,并会在oh-package.json5中自动添加依赖。以HAR/HSP包在工程根目录下为例,配置示例如下(实际配置时请以HAR/HSP包实际目录为准):

      • 引用HAR:

        cd path/to/your/project/entryohpm install /path/to/package.har
        
      • 引用HSP(*.tgz包通过HSP模块在release模式下编译生成):

        cd path/to/your/project/entryohpm install path/to/package.tgz
        
    • 方式二:在需要引入三方包的模块的oh-package.json5中设置本地HAR/HSP包。以HAR/HSP包在工程根目录下为例,配置示例如下(实际配置时请以HAR/HSP包实际目录为准):

      • 引用HAR:

        "dependencies": {  "package": "file:path/to/package.har" // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径}
        
      • 引用HSP:

        "dependencies": {  "package": "file:path/to/package.tgz" // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径}
        

      依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会安装在该模块的oh_modules目录下。

      ohpm install
      


最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

​​​​1

高清完整版请点击《鸿蒙NEXT星河版开发学习文档》

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

《鸿蒙 (OpenHarmony)开发学习视频》

《鸿蒙生态应用开发V2.0白皮书》

《鸿蒙 (OpenHarmony)开发基础到实战手册》

《鸿蒙开发基础》

《鸿蒙开发进阶》

《鸿蒙开发实战》
在这里插入图片描述

获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值