【鸿蒙开发教程】HarmonyOS 模块关系梳理

news2024/12/25 0:25:01

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两种共享包的主要区别体现在:

在这里插入图片描述

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

在这里插入图片描述

相同点: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

总结

有很多小伙伴不知道该从哪里开始学习鸿蒙开发技术?也不知道鸿蒙开发的知识点重点掌握的又有哪些?自学时频繁踩坑,导致浪费大量时间。结果还是一知半解。所以有一份实用的鸿蒙(HarmonyOS NEXT)全栈开发资料用来跟着学习是非常有必要的。

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了

最新鸿蒙全栈开发学习线路在这里插入图片描述

鸿蒙HarmonyOS开发教学视频

在这里插入图片描述
在这里插入图片描述

大厂面试真题

在这里插入图片描述

在这里插入图片描述

鸿蒙HarmonyOS源码剖析

在这里插入图片描述

这份资料能帮住各位小伙伴理清自己的学习思路,更加快捷有效的掌握鸿蒙开发的各种知识。有需要的小伙伴自行领取,,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→[鸿蒙全栈开发学习资料]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音快手AI无人直播系统:教你快速搭建视频循环直播场景只需五部

AI无人直播是一种创新的直播方式,利用先进的技术手段实现自动直播,无需人工干预。这种直播方式具有全天候自动直播的能力,无需运营和监管即可吸引流量并转化为订单。商家门店对这种低成本高效果的方式非常欢迎。通过轻松进行直播销售&#xf…

【C语言】一篇带你高强度解析精通 字符串函数和内存函数 (万字总结大全,含思维导图)(建议收藏!!!)

【 库函数】——字符串函数和内存函数 目录 思维导图: 一:字符串函数 1.1:字符串常规函数 1.1.1:长度不受限制的字符串函数 1.1.1.1:strlen函数 1.1.1.2:strcpy函数 1.1.1.3:strcat函数 …

工业镜头孔径、分辨率与景深参数简析

工业镜头孔径、分辨率与景深参数简析 一、前言二、镜头孔径与光圈系数2.1孔径与相对孔径2.2数值孔径(NA)2.3光圈系数(F/#)2.4工作光圈系数((F/#)w) 三、镜头分辨率3.1MTF与CTF3.1.1M…

干货分享!2024年Instagram营销必备插件

Instagram是营销人员常用的社交媒体平台,通过提升品牌知名度来推动业务增长。今天给大家分享一些超实用的Instagram营销插件,无论是下载图片视频,还是预先发布帖子,这些工具都可以是你的得力助手,让你的INS运营效率蹭蹭…

阿里云百炼开发AI大模型详解

AI项目功能设想描述文档 随着AI发展越来越迅速,各行各业都需考虑如何将AI结合到自己的产品中,目前国内大部分的AI问答网站,都是基于Open AI实现的,但是如何需要运用到企业产品中那我们考虑的因素就会比较多 将ChatGpt移植到企业中…

Activiti7 Maven笔记

通过maven完成BPMN的创建,定义流程,部署流程,完成流程等操作 代码整合创建maven项目添加log4j日志配置添加activiti配置文件创建数据库 activitijava类编写程序生成表如果代码运行,没有生成表,可能是没有读取到activiti的配置文件 Activiti数据表介绍类关系图工作流引擎创建默认…

AI产品经理的转行之路,如何迈向年薪80w的职业高峰?

前言 在当今科技日新月异的时代,AI产品经理作为一个炙手可热的职业,吸引了众多向往高薪与前沿领域结合的求职者的目光。年薪80万的诱惑力无疑是巨大的,但不少自学中的朋友发现,即便涉猎广泛的产品知识,想要顺利转型成…

力扣 42. 接雨水

题目来源&#xff1a;https://leetcode.cn/problems/trapping-rain-water/description/ C题解1&#xff1a;双指针 按列算&#xff0c;一列一列的求雨水面积。使用双指针是记录当前列左右侧的最大元素。 class Solution { public:int trap(vector<int>& height) {in…

中电联系列三:rocket手把手教你理解中电联协议!

分享《慧哥的充电桩开源SAAS系统&#xff0c;支持汽车充电桩、二轮自行车充电桩。》 前 言 T/CEC102《电动汽车充换电服务信息交换》共分为四个部分&#xff1a; ——第1部分&#xff1a;总则&#xff1b; ——第2部分&#xff1a;公共信息交换规范&#xff1b; ——第3部分&a…

【ARM Cache 及 MMU 系列文章 1.3 -- 如何判断 L2 Cache 是否实现】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 CPU Configuration Register代码实现CPU Configuration Register 在 armv9 架构中,我们可以通过arm 提供的自定义寄存器IMP_CPUCFR_EL1 来判断当前系统中是否实现了 L2 Cache, 如下所…

【Linux系统编程】进程终止

目录 strerror函数 errno错误码 退出码 正常终止&#xff08;可以通过 echo $? 查看进程退出码&#xff09;&#xff1a; 1. 从main返回&#xff08;return&#xff09; 2. 调用exit 3. _exit&#xff08;一般尽量不要用&#xff09; 异常退出&#xff1a; ctrl c&am…

django 旅游服务系统-计算机毕业设计源码88939

摘 要 旅游服务系统采用采用django框架、python语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、轮播图&#xff08;轮播图管理&#xff09;、公告信息管理&#xff08;公告信息&#xff09;、资源管理&…

解析 Spring 框架中的三种 BeanName 生成策略

在 Spring 框架中&#xff0c;定义 Bean 时不一定需要指定名称&#xff0c;Spring 会智能生成默认名称。本文将介绍 Spring 的三种 BeanName 生成器&#xff0c;包括在 XML 配置、Java 注解和组件扫描中使用的情况&#xff0c;并解释它们如何自动创建和管理 Bean 名称。 1. Be…

2024 年 5 月区块链游戏研报:市值增长、玩家参与变迁、迷你游戏兴起

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;GameFi 研究页面 2024 年 5 月&#xff0c;以太坊的表现因 SEC 批准现货以太坊 ETF 的初步申请而得到显著提振。区块链游戏代币的总市值达到 201 亿美元&#xff0c;环比上涨 6.7%。然而&#xff0c;尽管市值有…

年薪80w的AI产品经理技术知识合集

前言 最近&#xff0c;有很多的小伙伴向我咨询&#xff0c;为什么他们学习了大量的产品相关知识&#xff0c;却依然难以转行成为AI产品经理。经过分析&#xff0c;我发现主要原因可以归结为三点&#xff1a;不系统、没产出、不懂技术。那么&#xff0c;如何才能突破这些障碍&a…

ES升级--05--快照生成 和备份

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 备份ES数据1.关闭集群自动均衡2.执行同步刷新3.停止集群节点的Elasticsearch服务4.修改Elasticsearch配置文件&#xff0c;开启快照功能&#xff0c;配置仓库目录为…

金融数据中心布线运维管理解决方案

金融行业的核心业务&#xff0c;如交易、支付、结算等&#xff0c;对网络的依赖程度极高。布线作为网络基础设施的重要组成部分&#xff0c;其稳定性和可靠性直接关系到业务的连续运行。因此&#xff0c;良好的布线管理能够确保网络系统的稳定运行&#xff0c;减少因网络故障导…

EVS9329-ES驱动器EVS9329ES可议价

EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES步进电机按结构分类&#xff1a;步进电动机也叫脉冲电机&#xff0c;包括反应式步进电动…

VBA即用型代码手册:删除空列Delete Empty Columns

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

Transformer结合U-Net登上Nature子刊!最新成果让精度和效率都很美丽

最近一种基于视觉Transformer改进的U-Net来检测多光谱卫星图像中甲烷排放的深度学习方法登上了Nature子刊。与传统方法相比&#xff0c;该方法可以识别更小的甲烷羽流&#xff0c;显著提高检测能力。 这类Transformer与U-Net结合的策略是一种创新的深度学习方法&#xff0c;它…