Android视角看鸿蒙第三课(module.json中的各字段含义之nametype)

news/2024/7/27 8:49:55/文章来源:https://blog.csdn.net/weixin_44656996/article/details/136495889

Android视角看鸿蒙第三课(module.json中的各字段含义)

前言

上篇文章我们试图找到鸿蒙app的程序入口,确定了在鸿蒙工程中,由AppScope下的app.json5负责应用程序的图标及名称,由entry->src->main-module.json5负责桌面图标及名称的展示。
AppScope下的app.json5还包含了bundleName,versionCode,versionName等配置信息。
entry->src->main-module.json5除abilities下的icon及label字段外,还包含了例如mainElement,pages等等字面看起来就很重要的配置。
这篇文章开始我们主要了解这些字段的作用。

导读

个人以为这个地方不能完全按照经验来了,否则容易出乱子,忽略一些重要的信息。
给大家贴个链接https://developer.huawei.com/consumer/cn/hmos/overview/?catalogVersion=V2
因为版本的更新,文档和代码的对应性不是很强,所以下面内容的准确性无法保证,如有错误,希望您反馈给我,感谢!

结构

在这里插入图片描述
module.json5中包含很多字段,比如mainElement等是Srting,deliveryWithInstall是Boolean, pages引用了一个资源,abilities是一个数组。
挨个来分析和尝试下吧。

name字段

官方文档截图
在这里插入图片描述
因为版本更新的问题,字段名字和结构都对不上了,但依稀还能看出来他们应该是一致的,描述也不是他特别的详细。

思考一下

“name”: “entry”
name的值默认是我们module的名字,点击name看到了name字段的要求和描述(这一点还是不错的):
在这里插入图片描述

parrern 大意是不允许输入中文,但是好像不够全,比如‘鿕’ ,编码是‘\u9fd5’,大于\u9fa5,那这个字可以吗?

我更好奇的是他和module是否有实际关联呢?如果修改一下会发生什么呢?来试试吧。

尝试

第一步 尝试修改name
改成**“name”: “鿕”** 之后,运行到设备报错了
在这里插入图片描述
大概意思是:
我们修改后的name不存在,确保他在build-profile.json5文件中存在
找一下这个文件看看

第二步 确定build-profile.json5和name字段的关系
在这里插入图片描述
一共有两个,第一个在工程目录下,第二个在module目录下。
module目录下:
在这里插入图片描述

东西有点少,不像,跳过

工程目录下:
在这里插入图片描述
看到了,这里在modules数组中的第一个Object中包含了name和srcPath,我们继续看看这个那么能不能修改
在这里插入图片描述

可以看到修改之后,mudule之前是只有entry且entry加粗,现在是entry后多了一个中括号,中括号内是我们修改的名称。
运行依然报错
在这里插入图片描述
错误信息,大意是 我们的path格式错误,估计是我们的name虽然绕过了正则限定,但中文就是不行,改成英文试试吧。

在这里插入图片描述
这样就可以了,app也顺利跑起来了。
兄弟们在尝试的时候不要忘了namebuild-profile.json5都要修改哈。

结论

1、name字段可以修改,允许与module文件名不一致,;
2、name字段必须与工程目录下的build-profile.json5中modules声明的name一致
3、虽然少部分中文可以绕过正则限定,但依然无法成功运行,老老实实的用英文吧,中文也不是个好习惯。

type字段

“type”: “entry” 默认是这样的
点进去看看描述
在这里插入图片描述
他的类型是String,但是只能从下面四个中选一个,先上个翻译
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
除了entry好像都不好理解,entry是入口的意思。
翻了翻文档,找到了这个,也不是很全,将就看吧_-
在这里插入图片描述
早期只有两个,entry和feature,我们目前就只熟悉这两个,个人感觉这个东西如果没有详细说明,埋头去尝试的话并不能够完全理解。
再上一段文字描述
** HarmonyOS的用户应用程序包以APP Pack(Application Package)形式发布,它是由一个或多个HAP(HarmonyOS Ability Package)以及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。**

一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型,如图1所示。

entry:应用的主模块。一个APP中,对于同一设备类型,可以有一个或多个entry类型的HAP,来支持该设备类型中不同规格(如API版本、屏幕规格等)的具体设备。如果同一设备类型存在多个entry模块,则必须配置distroFilter分发规则,使得应用市场在做应用的云端分发时,对该设备类型下不同规格的设备进行精确分发。
feature:应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。

思考

只有一个feature类型的module能否运行

官方文档提到: (feature:应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。)
那如果没有entry,只有feature能不能独立运行?

尝试

直接把
“type”: “entry”
变更为
“type”: “feature”
看看会发生什么
在这里插入图片描述
报错了,意思是feature必须在build-preofile.json5中设置entryModules
我们在这里添加一个entryModules,看看这个字段的描述
在这里插入图片描述
If the module is a feature module, this field needs to be used to specify the associated entry module.
如果是feature类型,需要声明entry module。
所以我们把这个改回来,重新创建一个feature类型的module
在这里插入图片描述
还是选择这个类型,如果依然可以选择entry类型的话,我们还选这个类型.
理论上是可以的,因为文档上的描述entry:应用的主模块。一个APP中,对于同一设备类型,可以有一个或多个entry类型的HAP
在这里插入图片描述
但是事实却是不行,只能创建feature类型,继续application改成library
在这里插入图片描述
可以看到目录结构完全是一致的,接下来对比一下feature和entry默认的mudule的区别
在这里插入图片描述
有区别的地方很少,
除type之外entry类型比feature类型多了一个skills字段,其他完全一致

再对比一下build-preofile.json5,之前报错是需要我们在feature类型中的此文件中,增加entrymodules的,我们看一下这个字段应该怎么写
在这里插入图片描述
ok,也只有这一个区别。

那现在我们把feature类型的entryModules字段删除看看又会发生什么
在这里插入图片描述
依然还是这样,所以feature中必须有这个字段。

改回来可以运行了,突然发现运行时,module默认选中的是library
在这里插入图片描述
那运行出来的第一个界面,是library的还是app的呢?
修改一下library的hello world,再次运行,发现出现的是我们修改过的文案,那就是说feature项目可以独立运行,但是工程目录下必须有个entry目录,可以不用但必须有!

那这种情况下,桌面图标是entry module配置的,还是library的,答案是都不是,桌面图标从桌面上消失了,没有桌面app名称,没有图标,桌面占位都空出来了

结论

1、只有一个feature类型 的module,无法运行
2、feature类型的build-profile.json5中必须包含entryModules
3、运行时可以选择feature类型 的module,出现的第一个页面就是feature的index.ets,此时桌面图标消失。

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

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

相关文章

uniapp封装文字提示气泡框toolTip组件

uniapp封装文字提示气泡框toolTip组件 文字提示气泡框:toolTip 因为uniapp 中小程序中没有window对象,需手动调用 关闭 第一种办法关闭:this.$refs.tooltip.close() 第二种办法关闭:visible.sync false 移动端没有现成的toolTip组…

释机器学习中的召回率、精确率、准确率

准确率和召回率之间通常存在一定的折衷关系——当阈值较高时,分类器的准确率较高,但召回率较低; 当阈值较低时,分类器的召回率较高,但准确率较低 召回率(灵敏度):对实际为正类的样本,模型能识别…

【机器学习300问】26、什么是SVM支持向量机?

〇、小卖部二分类的例子 地图上有两个小卖部A和B,地图上的点代表一个人,调查这些人去A或者B小卖部的可能性,根据可能性将人群分为A派和B派。假设我们只考虑人们距离小卖部的距离这一个特征,比如距离A小卖部近的人去A的概率大。 图…

总结Redis的原理

一、为什么要使用Redis 缓解数据库访问压力mysql读请求进行磁盘I/O速度慢,给数据库加Redis缓存(参考CPU缓存),将数据缓存在内存中,省略了I/O操作 二、Redis数据管理 2.1 redis数据的删除 定时删除惰性删除内存淘汰…

医学大数据|统计基础|医学统计学(笔记):开学说明与目录

开始学习统计基础,参考教材:医学统计学第五版 点点关注一切来学习吧 责任编辑:医学大数据刘刘老师:头部医疗大数据公司医学科学部研究员 邮箱:897282268qq.com 久菜盒子工作室 我们是:985硕博/美国全奖…

Git 掌握

目录 一、前言 二、centos安装Git 三、Git基本操作 (1) 创建Git本地仓库 (2) 配置Git (3) 认识工作区,暂存区,版本库 四、添加文件 五、查看.git文件 六、修改文件 七、版本回退 八、撤销修改 (1) 场景一 对于还没有add的代码 (2) 场景二 已…

【Educoder数据挖掘实训】异常值检测-值域法

【Educoder数据挖掘实训】异常值检测-值域法 开挖! 这个题中 l o f lof lof算法给的很抽象,先用比较通俗的方式说一下: 首要想法是找到不合群的点,也就是异常点。采用的方法是对局部可达密度进行判断。相较于其他普通的简单基于聚…

可以实现单个、两个、四个圆角的qml自定义控件

控件名: RadiusRectangle File: RadiusRectangle.qml import QtQuick 2.0Item {id: rootwidth: 100height: 100clip: trueproperty int itemRadius: 0property color itemColor: "red"property real itemOpacity: 1property int rightMargin: 0property int leftMar…

CubeMX使用教程(3)——GPIO

在第二章我们完成了点灯仪式,这次我准备尝试把按键和灯结合起来,做一次GPIO的综合测试 实验任务为:按下按键1(B1),第1个灯(LD1)亮; 按下按键2(B2)…

【应用多元统计分析】--多元数据的描述和展示(R语言)

一元随机变量 我们用协方差来刻画两个变量的相关关系,这里指的是线性相关关系。 对于一元随机变量的可视化最简单的就是散点图,大致可以看出X和Y之间的相关关系。如果想更好的看X、Y之间的相关关系,可以画二维的散点图。 总结: 均…

重塑语言智能未来:掌握Transformer,驱动AI与NLP创新实战

Transformer模型 Transformer是自然语言理解(Natural Language Understanding,NLU)的游戏规则改变者,NLU 是自然语言处理(Natural Language Processing,NLP)的一个子集。NLU已成为全球数字经济中AI 的支柱之一。 Transformer 模型标志着AI 新…

基于AI软件平台 HEGERLS智能托盘四向车机器人物流仓储解决方案持续升级

随着各大中小型企业对仓储需求的日趋复杂,柔性、离散的物流子系统也不断涌现,各种多类型的智能移动机器人、自动化仓储装备大量陆续的应用于物流行业中,但仅仅依靠传统的物流技术和单点的智能化设备,已经无法更有效的应对这些挑战…

【数仓】Kafka消息可视化工具:Offset Explorer(原名kafka Tool)

Offset Explorer(以前称为Kafka Tool)是一个用于管理和使用Apache Kafka集群的GUI应用程序。 它提供了一个直观的界面,允许用户快速查看Kafka集群中的对象以及集群主题中存储的消息。 它包含面向开发人员和管理员的功能。 一些主要功能包括&a…

redis 性能优化二

前言 性能优化的第二篇文章,将重点讲一下Redis 的响应延迟,响应延迟如何对redis 进行优化。这个延迟不是说一个命令或者几个命令变慢了,延迟了几秒,就说Redis 变慢了。在不同的软硬件环境下,Redis 本身的绝对性能并不…

C++STL【priority_queue 优先级队列】

priority_queue 优先级队列 介绍 priority_queue,优先级队列,它的底层是个vector,在vector的基础上封装堆的算法,于是它摇身一变,成了一个存储在一块连续空间中的堆。 《什么是堆?》 堆是一棵完全二叉树&…

案例5 RPC调用请求规则链

您已将以下设备连接到ThingsBoard: Wind Direction Sensor. 风向传感器。Rotating System. 旋转系统。 also, you have one asset: 你还有一项资产 Wind Turbine. 风力涡轮机。 您要向旋转系统发起RPC请求,并根据风向更改风力涡轮机的方向。 https:/…

SQL 初级

SQL 初级 SQL 简介 SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。 SQL 是什么? SQL…

从新能源汽车行业自动驾驶技术去看AI的发展未来趋势

自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 🐓 自动驾驶技术 这是AI在汽车行业中应用最广泛的领域之一。自动驾驶技术利用AI算法和传感器来感知环境、识别障碍物&#xff0c…

力扣大厂热门面试算法题 - 矩阵

解数独,单词搜索,被围绕的区域。每题做详细思路梳理,配套Python&Java双语代码, 2024.03.07 可通过leetcode所有测试用例。 目录 37. 解数独 解题思路 完整代码 Python Java 79. 单词搜索 解题思路 完整代码 Python…

多目标粒子群(MOPSO)算法原理及其MATLAB实现

粒子群算法(PSO)是Eberhart和Kennedy于1995年提出的一种模拟鸟类觅食行为的算法[1],具有操作简单、速度快等特点。但在实际应用中,许多决策问题都是多目标优化问题,采用粒子群算法来处理多目标优化问题是一种有效方法,Coello 等人…