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

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源码剖析

在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

西南交通大学【操作系统实验2】

实验目的 本实验要求学生了解什么是信号,掌握软中断的基本原理;掌握中断信号的使用、进程的创建以及系统计时器的使用。通过对本实验的学习,学生能够学会进程的创建方法,更能加深对Linux中的信号机制的认识,并会使用软…

《银行存量客户运营》导读

前言:在中国生活,没有一个人能够离得开银行,但是又有多少人真正了解银行呢? 通过本书你可以学习到:银行不为外人了解的内部运营机制,甚至可以提前把握银行涨息降息政策规律 银行运营的基础逻辑 “运营”二…

泉城济南的隐秘珍宝与山东旅游必去十大景点

泉城济南的隐秘珍宝与山东旅游必去十大景点 济南,这座历史悠久的城市,不仅以其丰富的人文底蕴著称,还拥有诸多引人入胜的自然景观。在这片华夏神州广阔的齐鲁大地上,济南特别以其“三无风景区”——无影山、无影潭、无影泉——而闻…

ON DUPLICATE KEY UPDATE 子句

ON DUPLICATE KEY UPDATE 是 MySQL 中的一个 SQL 语句中的子句,主要用于在执行 INSERT 操作时处理可能出现的重复键值冲突。当尝试插入的记录导致唯一索引或主键约束冲突时(即试图插入的记录的键值已经存在于表中),此子句会触发一…

neo4j 3.5.5版本创建新的数据库

neo4j 3.5.5版本创建新的数据库 1.找到neo4j的conf文件 点进去 2.点击neo4j.conf 选择记事本打开 3.把graph.db换成自己想要创建的数据库名称 4.打开neo4j服务 出现新的数据库

AI Agent 热门的10篇论文

人工智能代理领域广阔,涵盖广泛的主题,包括多代理系统、强化学习、上下文感知系统以及将大型语言模型 (LLMs) 集成到基于代理的系统中。以下是 arXiv 的一些顶级论文,涵盖了人工智能代理的各个方面: A Framework For Intelligent Multi Agent System Based Neural Network …

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机,每天晚上21点开始做rman完全备份,大约第2天上午9点多完成备份,rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份,6月2日上午10点15分完成备份,并生成了一个控制文件备份 c-4063271871-2024…

量产导入 | KGD 是什么?

文章目录 KGD 是什么?认识KGD定义、功能与应用实例【白话文解析】Known Good「Die」何谓良品裸晶粒 (KGD/KGD Die)?解读KGD产业应用为什么大家纷纷采用KGD? 一窥KGD与芯片封测大趋势 KGD 是什么?认识KGD定义…

【Linux系统】线程与线程控制

本篇博客整理了Linux下线程的概念、线程控制的相关接口,旨在让读者初步认识线程,并为下一篇多线程作铺垫。 目录 一、线程是什么 1.线程是进程的执行流 2.线程的执行、调度、切换 3.页表分级与线程资源分配 4.线程的优缺点 二、线程控制 1.创建…

mmdeploy环境部署流程

参考:mmdeploy/docs/zh_cn/01-how-to-build/linux-x86_64.md at main open-mmlab/mmdeploy (github.com) 从零入门《openmmlab》mmdeploy[1]环境安装及简单上手_哔哩哔哩_bilibili 我的环境: docker容器,ubuntu20.04,cuda11.7…

【万方数据库爬虫简单开发(自用)】

万方数据库爬虫简单开发(自用)(一) 使用Python爬虫实现万方数据库论文的搜索并获取信息1.获取url2.输入关键词3.使用BeautifulSoup解析4.获取文章标题信息 使用Python爬虫实现万方数据库论文的搜索并获取信息 后续会逐步探索更新…

从盛世到衰落,历史上八大强国的兴衰与现代地位!

人类文明史悠久,从远古时代至今日,世界舞台上曾经涌现出许多强盛的帝国。它们在自己的黄金时代,曾经无人能敌,不论是在军事、经济还是文化上都独领风骚。然而,无论多么强大的国家也难逃“兴盛必衰”的命运。今天&#…

javaWeb项目-在线考试系统详细功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Java简介 Java语…

ArcGIS 10.8软件安装包免费下载及安装教程

安装包获取: 【软件名称】:ArcGIS 10.8 【安装包链接 】: 链接:https://pan.quark.cn/s/2240330bf935 提取码:Yixn 【备用链接】: 链接:https://pan.baidu.com/s/13V5o_igcK0suW4SFsWkxeQ?pwdj6kx 提取码…

Springboot 整合 Flowable(一):使用 flowable-UI 绘制流程图

目录 一、Flowable简介 二、Flowable 与 Activiti 的区别 三、流程图的绘制(以员工请假流程图为例) 1、下载 flowable 的压缩包: 2、启动包中的 tomcat 3、登录页面 4、绘制结束,导出 bpmn20.xml文件 一、Flowable简介 Fl…

拥抱AI-图片学习中的卷积神经算法详解

一、定义 卷积神经算法(Convolutional Neural Networks, CNN)是深度学习领域中的一种重要算法,特别适用于处理图像相关的任务。以下是卷积神经算法的详细解释: 1. 基本概念 定义:卷积神经网络是一类包含卷积计算且具…

Oracle的优化器

sql优化第一步:搞懂Oracle中的SQL的执行过程 从图中我们可以看出SQL语句在Oracle中经历了以下的几个步骤: 语法检查:检查SQL拼写是否正确,如果不正确,Oracle会报语法错误。 语义检查:检查SQL中的访问对象…

文件IOoooo

1.1 文件路径 文件路径分为两种: 1、绝对路径:以C:、D:等盘符开头的,就是我们所说的绝对路径,根据它可以直接找到文件的具体位置。 2、相对路径:需要先指定一个目录作为基准目录,从基准目录出发&#xf…

python的resample()函数

介绍 在Python中,resample()函数是一个常用的工具,用于对时间序列数据进行重新采样。这个函数可以将时间序列数据从一个频率转换为另一个频率,比如将每天的数据转换为每月的数据。在本教程中,我将向你展示如何使用resample()函数,并解释每个步骤的具体含义。 整体流程 首先…

SAP PP学习笔记20 - 复习总结一下MTS,MTO,ATO的各种生产策略

上面几章详细讲了MTS,MTO,ATO的各种生产策略。 内容太多了,本章咱们就简单回顾,复习一下。 计划策略(Planning Strategies) 的种类 - MTS(Make-to-Stock):按库存生产(見込生産&…