【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十五)

课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发

(本篇笔记对应课程第 23 - 24 节)

P23《22.Stage模型-基本概念》

在这里插入图片描述

在这里插入图片描述

一个应用可以有很多的能力,每个能力可以成为一个 Ability Module,比如微信,主要是一个设计APP,其聊天、朋友圈这些能力都属于社交范围,可以放在同一个 Ability Module 中。后来微信又拓展了小程序、视频号等功能,这些功能与社交有了一定不同,可以分别放在不同的 Ability Module 中。

在开发这些 Ability Module 的过程中,势必会存在一些通用的工具、资源、配置文件等,如果每个模块都单独开发与维护,显示是一种浪费。我们会将这些公共的资源抽取出来,放到一个公共的模块,成为 Library Module,是一种共享依赖类型的模块。 Ability Module 就可以引用 Library Module, 使用其中的功能。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

每个module可以单独打包编译,所有 Ability Module 编译时会被编译为 HAP(Harmony Ability Package); Library Module 编译时会被编译为 HSP(Harmony Shared Package),即共享类型的包; HAP类型的包在运行时就可以引用和依赖 HSP 类型的包。

在这里插入图片描述

一个应用的内部可能有各种各样不同的能力,这样就会分为多个不同的 Ability Module,打包后就会有多个 HAP 类型的文件。其中,Entry Module 里主要开发应用进入时的页面、以及整个应用的主能力模块,即最核心的部分。剩余部分即为拓展模块。

一个应用有且只能有一个Entry类型的HAP,可以有多个 Feature 类型的HAP。多个HAP会打包到一起成为一个bundle ,这个 bundle 会有一个名字,可以理解为这个应用的唯一标识。将来还会打包成为一个 .app 类型的文件。

多HAP模式的优势:1、降低各个HAP模块的耦合性;2、用户安装应用时可以选择部分核心功能进行安装

在这里插入图片描述

在这里插入图片描述

在运行期,首先需要有一个 AbilityStage , 在其上展示 Ability , Ability 有不同的类型,常见的有 UIAbility, ExtensionAbility , UIAbility 是包含UI界面的应用组件,除了它还会有 ExtensionAbility ,比如输入法相关的功能。开发主流的应用都是基于 UIAbility 的。

UIAbility 作为UI界面的组件,将来要展示 UI界面,但它不是直接展示UI的。它首先持有一个 WindowStage 的实例对象, WindowStage 与 AbilityStage 类似,都是一个“舞台”,它是组件内窗口的舞台,UI组件内部需要有一个窗口,这个窗口需要展示在一个舞台上, WindowStage 上会持有Window对象,即窗口,窗口里去展示UI界面。

正是由于存在这种“舞台”的机制,ability 和 window 就分隔开了,它们之间就解耦了。将来我们开发一些跨设备的应用时,就可以根据不同设备的窗口单独去做一些处理去适应不同的设备。

在这里插入图片描述

P24《23.Stage模型-应用配置文件》

应用的配置文件分为两类:一类是全局配置文件,放在 AppScope 目录下,如 app.json5 ;另一类就是应用内部的每个模块里,如 entry 模块中的 module.json5 。

在这里插入图片描述

我们打开AppScope下的 app.json5 看一下:

bundleName : 应用的包名,它是应用的唯一标识,一般用域名倒写的方式命名。它是在创建应用时就设置好了。

在这里插入图片描述

在这里插入图片描述

versionCode : 版本信息
versionName : 版本信息
icon : 应用图标,读取的就是media 下的 app_icon 资源
label :

由于是全局配置文件,它读取的也是全局下的 resources 下对应的资源:
在这里插入图片描述

**注意这里的 icon 与 label 不是我们在手机桌面上看到的图标与名称,而是在应用列表中的应用图标与名称,**在这里进入应用列表:

在这里插入图片描述

进入 应用管理:

在这里插入图片描述

滑到最下方,可以看到我们的应用:

在这里插入图片描述

再来看下 entry 模块下的 module.json5 配置文件:

在这里插入图片描述

type: 是该模块的类型,可以有三个值: entry feature shared

在这里插入图片描述
mainElement : 可以理解成当前这个模块的入口,每个模块编译后都是一个HAP文件,都是可以独立运行的,它在独立运行时,需要先创建一个 AblityStage 在这个舞台上去创建一个 Ability。在一个模块内部可以创建多个 Ability。如果这个应用有多个 Ability,默认只能启动一个,默认启动的这个就叫做入口 Ability。mainElement 就是定义入口 Ability 的名字的,它可不是随便起的哦!

在这里插入图片描述
**deviceType :**在一个应用(项目)下可以有多个模块,每个模块将来都会被打包成一个HAP文件,可以给不同的HAP模块设置不同的设备类型

deliveryWithInstall : 前面说了不同的模块可以选择性安装,其中 enter 类型的模块必须安装,而 feature类型的可以选择性安装,deliveryWithInstall 为true就是必须安装,false则是非必须安装

在这里插入图片描述
pages : 当前模块下的所有页面信息,读取的是 profile 下的 main_pages.json 文件中定义的页面信息;

abilities : 模块下如果有多个 abilities,就需要在这里配置 abilities 信息。

由于当前模块 enter 是入口模块,该模块只有一个 ablity 就是入口 ablity ,所以当前 ablity 的 icon 和label就成了应用的 icon 和label 了

在这里插入图片描述

在这里插入图片描述

在这里改不太好,因为 element下是默认的,不同语言环境下还有其配置文件,应该优先改 不同语言环境下的配置。一个个改太麻烦了,我们点击 打开编辑器 按钮,它将多个限定词下的配置项都列出来了,可以直接在这里修改:

在这里插入图片描述

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

**startWindowBackground:**应用启动时的图标和背景色:

在这里插入图片描述

验证修改效果:

在这里插入图片描述

由于设置有缓存,将设置清理掉再次查看:

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

更多配置信息:
在这里插入图片描述

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

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

相关文章

领域驱动设计(DDD)微服务架构模式总结

part1. Domain Driven Design(Strategic Design,Tactical Design) Top Down focus on business or activityy domain Ubiquitous Language:统一语言 Tactical Design Tools:战术性设计工具 Implementing Domain Driven Design(Event storming,DDD in code) DDD总结…

阿里巴巴橙点同学达摩院认证证书

网址:https://orange-class.com/ 为竞争激烈的职业做好充分的准备,无需相关经验立即开始学习。 阿里达摩院组织背书认证。 内容包括八个职业方向,涉及AI、开发、营销、设计等不同岗位: 其中,AI的高级认证情况如下&…

收藏丨世界地形图(超高清)

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247668146&idx2&snbebd2f4921994ab05ed47efdebe8e706&chksmfa770e8fcd008799bf1d1cabd62edca7f60a5c7a1ef9c0bacf3bdc102bccf0f12d54d6c07c49&token1405091246&langzh_CN&scene21#we…

Ubuntu 22.04.4 LTS openresty(Nginx) 通过Lua+Redis 实现动态封禁IP

1 系统环境 testiZbp1g7fmjea77vsqc5hmmZ:~$ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.4 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.4 LTS (Jammy Jellyfish)" VERSION_CODENAMEjammy IDubuntu ID_LIKEdebian HOME…

星谷案例入选新华社国家高端智库报告,彰显国际影响力!

中关村科学城星谷(创新园)以其在商业航天领域的卓越创新能力和显著产业影响力,被新华社国家高端智库专题组认可,并入选《更好赋能中国繁荣世界——新质生产力的理论贡献和实践价值》智库报告,成为新质生产力的典型代表案例。 这是中关村科学城星谷(创新园)继登上《新闻联播》后…

卓越的 App UI 风格引领潮流

卓越的 App UI 风格引领潮流

RAG实操教程langchain+Milvus向量数据库创建你的本地知识库 二

Miluvs 向量数据库 关于 Milvui 可以参考我的前两篇文章 • 一篇文章带你学会向量数据库Milvus(一)[1]• 一篇文章带你学会向量数据库Milvus(二)[2] 下面我们安装 pymilvus 库 pip install --upgrade --quiet pymilvus如果你…

如何开启Claude 3的Artifacts功能以及如何注册Claude3

就很突然,Claude 3.5,它来了! Anthropic发布3.5系列第一个版本Claude 3.5 Sonnet。在多个关键指标中,GPT-4o几乎被吊打! 另外Claude 3.5 Sonnet是免费的,提供了跟gpt-4o一样的次数。更高的速度和次数&…

python循环写入新样本到csv文件,并解决中文乱码的问题

新样本循环写入csv中 def write_sample(self):# 创建一个包含所有字段的列表,它将作为CSV的一行fields [基地, 拉线, 正/负极车间, 罐体编号, 样本ID, 工步序号, 检测结果]row_data [self.base_id, self.line_id, self.workshop_id, self.device, self.filename[:…

微信公众号多域名回调系统V1.5 源码

这是一款基于ThinkPHP6.0开发的微信公众号多域名回调系统。本系统有如下功能: 微信公众号多域名回调功能:微信公众号后台默认只能授权2个网页域名,用本系统突破这个限制,用同一个公众号对接无限多个网站。网站后台支持回调域名白…

王者荣耀图鉴皮肤怎么来的

王者荣耀图鉴皮肤怎么来的 最近一个王者荣耀图鉴开源很火 这个项目里面有很多的图片和音效资源,最简单的方法就是利用爬虫技术爬取这些图片资源。 第一步环境准备 Pyhton3.12macos系统 第二步查看王者荣耀官网 这些图片资源最简单的来源就是王者荣耀官网网站…

【FPGA + Nvidia/算能GPU+AI】自动驾驶多核异构实现 16路车载摄像头实时AI分析解决方案

基于 Xilinx 公司ZYNQ Ultrascale MPSoC系列 FPGA 芯片设计,应用于无人驾驶、慢速特种车及数据采集车、车载仿真测试系统等自动驾驶领域 自动驾驶:16通道车载摄像头PCIE采集卡方案。 16 通道摄像头 最多支持 16 通道 GMSL1/2 摄像头输入 8MP 摄像头 最…

MyBatisplus使用报错--Invalid bound statement

报错如下 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lotus.mybatis.mapper.UserMapper.selectListat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)at com.baomidou.mybatisplus.cor…

ModelScope联手OpenDataLab:直接调用7000+开源数据集,赋能AI模型加速研发

在人工智能的演进历程中&#xff0c;数据和模型的整合是推动技术发展的核心动力。随着AI技术的不断进步&#xff0c;整合各类关键资源&#xff0c;构建一个高效、协同的开发环境&#xff0c;已成为加速创新应用发展的关键。 基于这一理念&#xff0c;OpenDataLab浦数与ModelSc…

python基础篇(4):range语句

1 功能介绍 range语句的功能是获得一个数字序列&#xff08;可迭代类型的一种&#xff09; 2 语法 语法1&#xff1a; range(num) 获取一个从0开始&#xff0c;到num结束的数字序列&#xff08;不含num本身&#xff09; 如range(5)取得的数据是&#xff1a;[0, 1, 2, 3, 4…

在华为服务器上编译C++工程的若干错误以及排查方法和解决方法记录

目录 1 报错 2 查找错误原因 2.1 方法一&#xff1a;ldd命令 2.2 方法二&#xff1a;警告信息里面 3 解决错误 3.1 libpng16.so.16 和 libbrotlidec.so.1 问题 3.2 libdevmmap.so 和 libslog.so库问题 3.3 剩余错误 3.3.1 libacllite.so错误解决 3.3.2 libtaclstream…

通过自定义分配器解决 ZGC中的碎片问题

1.问题 ZGC 和其他垃圾收集器通常使用碰撞指针分配&#xff0c;这对于顺序分配很有效&#xff0c;但随着时间的推移会导致碎片化。当产生无法轻松重用的内存间隙时&#xff0c;就会发生碎片化&#xff0c;这需要昂贵的活动对象重新定位。这项研究的目标是通过使用基于空闲列表…

LCP 61. 气温变化趋势

题目 力扣城计划在两地设立「力扣嘉年华」的分会场&#xff0c;气象小组正在分析两地区的气温变化趋势&#xff0c;对于第 i ~ (i1) 天的气温变化趋势&#xff0c;将根据以下规则判断&#xff1a; 若第 i1 天的气温 高于 第 i 天&#xff0c;为 上升 趋势若第 i1 天的气温 等…

Flash页、扇区、块的区别

文章目录 前言玩转Flash的小知识一、页(Page)二、扇区(Sector)三、块(Block)总结存储基础知识 瑞萨芯片简介(片上资源分配)和工具链使用 前言 FLASH 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速…

SpringBoot测试实践

测试按照粒度可分为3层&#xff1a; 单元测试&#xff1a;单元测试&#xff08;Unit Testing&#xff09;又称为模块测试 &#xff0c;是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中…