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

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.hqwc.cn/news/519328.html

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

相关文章

【Java项目介绍和界面搭建】拼图小游戏——作弊码、查看完整图片

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

uniapp和vue项目配置多语言,实现前端切换语言

在uniapp中配置多语言功能,实现前端切换语言,可以按照以下步骤进行: 1. 创建语言包 首先,创建一个名为 lang 的目录,并在该目录下为每种支持的语言创建对应的JSON或JS文件。例如: lang/en.js&#xff08…

数智化转型的新篇章:企业如何在「数据飞轮」理念中寻求增长?_光点科技

在当今的数字化浪潮中,企业对数据的渴求与日俱增。数据不再仅是辅助决策的工具,而是成为推动业务增长的核心动力。自从「数据中台」概念降温后,企业纷纷探寻新的数智化路径。在这个过程中,「数据飞轮」作为一种新兴的理念&#xf…

Java中super关键字作用及解析

在 Java 中,super关键字主要有以下作用: 在子类构造方法中调用父类的构造方法:使用super关键字可以在子类的构造方法中显式调用父类的构造方法,以便继承父类的属性和行为。语法如下:这样可以确保父类的构造方法被正确…

【Datawhale组队学习:Sora原理与技术实战】

Transformersdiffusion技术背景简介 Transformers diffusion背景 近期大火的OpenAI推出的Sora模型,其核心技术点之一,是将视觉数据转化为Patch的统一表示形式,并通过Transformers技术和扩散模型结合,展现了卓越的scale特性。 被…

好书安利:《大模型应用开发极简入门:基于GPT-4和ChatGPT》这本书太好了!150页就能让你上手大模型应用开发

文章目录 前言一、ChatGPT 出现,一切都变得不一样了二、蛇尾书特色三、蛇尾书思维导图四、作译者简介五、业内专家书评总结 前言 ​如果问个问题:有哪些产品曾经创造了伟大的奇迹?ChatGPT 应该会当之无愧入选。仅仅发布 5 天,Chat…

dubbo3适配springboot2.7.3

版本详细 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.3</version> </dependency><parent><groupId>org.springframework.boot</groupId><artifactId&…

Aigtek超声功率放大器的使用场景有哪些

超声功率放大器是一种用于增强和放大超声信号的设备&#xff0c;通常用于各种不同的应用场景。下面西安安泰将介绍一些常见的使用场景。 医疗领域&#xff1a;超声功率放大器在医学影像中扮演着重要角色。医生可以使用超声波产生的图像来诊断疾病、检测器官功能以及进行手术导航…

基于springboot+vue的在线远程考试系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

双指针、BFS和图论算法

双指针、BFS和图论算法 一、双指针例题日志统计题目信息思路题解 二、BFS例题1、献给阿尔吉侬的花束题目信息思路题解 2、红与黑题目信息思路题解 图论例题交换瓶子题目信息思路题解 一、双指针 例题 日志统计 题目信息 思路 题解 #include <bits/stdc.h> #define in…

使用nginx输入端口号显示404

输入对应的端口号显示404 先检查当前nginx文件夹的路径是没有中文的查看是否没有开启nginx&#xff1a;ctrlaltdelete打开任务管理器&#xff0c;看看有没有nginx.exe进程&#xff08;一般是有两个进程&#xff09;如果没有进程说明没有打开nginx&#xff0c;查看端口号是否被…

MySQL基础-----SQL语句之DCL数据控制语句

目录 前言 一、管理用户 1.查询用户 2.创建用户 3.修改用户密码 4.删除用户 案例 二、权限控制 1.查询权限 2.授予权限 3.撤销权限 案例 前言 本期我们学习SQL语句的最后一部分内容&#xff0c;也就是数据控制语句DCL。DCL英文全称是Data Control Language(数据控制语…