Android视角看鸿蒙第三课(module.json中的各字段含义之description&mainElement)
前言
上编文章了解了module.json中的name和type两个字段的含义及变更字段需要注意的事项,也明白了如何去实现类似Android library的功能。
这篇文章继续了解module.json中的description和mainElemoent的作用。
description
官方文档
字段定义
思考
这个字段看起来是不影响程序运行的,且
** 该标签可缺省,缺省值为空。**
,目前理解是为了开发协同中作为module的简单说明。
依然我们尝试下几个问题:
** 完全注释掉这个字段会不会有问题;**
** 直接输入null是否可行(不加双引号);**
** 如果字符超限,编译器是否有提示,是否能运行。**
尝试
完全注释掉这个字段会不会有问题
** 插曲 **
json5文件内的内容支持==//==注释,快捷键是ctrl+/,与AS一致
运行一下,看看是否可行
ok,成功运行了。
直接输入null是否可行(不加双引号)
可以看到,输入null之后直接变黄,类型不符合,那这样的话是否能运行成功呢?
答案是**不行 **
ok,改回去继续尝试下个问题.
字符超限,编译器是否有提示,是否能运行
有两种改法,第一种是直接修改值,输入内容,第二种是修改被索引的字符串资源的值。
先来第一种,
编辑器也是有提示的,不能超过255,运行一下看看会报错误不。
这个错误看着很顺眼,指向特别明确,比上面输入null的时候清晰太多了。
但是依然跑不起来。
试试第二种
有三个索引,第一篇文章说了,如果该语言环境下有资源,优先使用该资源,所以我们先修改zh_CN下的字符串。
看起来是没有问题的,没有像之前一样变黄,运行试试。
成功了。
接下来我们把3个索引资源的字符串都修改,看看会不会有问题
依然没有问题
结论
1、不允许直接输入null(没有双引号),会变黄,运行会报错;
2、不允许直接输入超过255的字符串,会变黄,运行会报错;
3、可以索引超过255长度的字符串,但目前不清楚此字段是否会在其他地方展示,若在其他地方展示,可能会出现其他问题。
mainElement
官方文档
字段定义
思考
官方文档描述代表了当面module的入口,可以缺省
这里尝试下面几个问题:
entry可以没有定义此字段吗?会发生什么?
是否可以定义资源索引?是否可以突破此字段?
entry是否可以使用feature中的UIAbility?
ExtensionAbility是什么?
尝试
换个入口试试
创建成功了,但是出现了一个小小的问题,我是选中entryability文件夹创建的ability(见上图),但是新创建的多出来了个新文件夹,而且出现在了ets目录下(见下图)
就是玩,我们复制一份SecondAbility.ts到entryAbility文件夹下,看看能不能成功
成功了,这里我在复制的时候,手动把文件名改成了ThirdAbility,类名并未随之变化。
接下来我们手动把mainElement修改成我们复制的这个ThirdAbility
ok,并未变黄,再加点日志吧,方便看。
运行。
只打出来了一个,什么情况?
为了排除我们log的原因我们把目前的三个Ability文件的日志都修改一下
ok,继续跑一下。
竟然还是EntryAbility.ts
确定一下是我们复制出来的这个ThirdAbility.ts导致的问题吗?
现在把这个字段改成
看看效果
还是这样创建出来的也不行。
在‘run’tab下看到启动的还是EntryAbility。
** 迷茫**
难道这个字段不是这么用的吗?再看看文档
看不出来啥
再看看这个文件的其余字段
这里看到abilities字段下有两个对象,没有我们复制出来的ThirdAbility,而且EntryAbility比SecondAbility多出了两个字段"exported”和“skills”。
现在我们把这两个字段剪切给SecondAbility,看看有没有变化
看到变成了SecondAbility了。
这是什么原因,难道mainElement只是个描述作用吗?
现在我们把mainElement注释掉,看看有没有变化
并不影响,还是启动的SecondAbility。
而且发现桌面的图标和名称都发生了变化,(第二课的时候我们修改了桌面的图标和名称),又都变成了默认的。
可以看到两个Ability是不一致的。
接下来我们修改一下SecondAbility的label索引的String值,看看桌面的改变
生效了。
好了,关于入口的问题就讨论到这里,之后的文章再描述,要不就跑题了。
至此其他问题也没有意思了,mainElement仅仅只是描述,可以参考description,哈哈,稳妥起见我还是运行了下
没有任何问题。
结论
mainElement仅仅描述了程序入口,无任何实际意义。和我说地球是方的是一样的,程序入口和abilities下的exported及skills有关(之后再分别讨论这两个字段的意义)
附加收获:
复制出来的Ablity.ts文件,修改文件名后类名不变,且没有自动添加到module.json5文件内的abilities字段内,大概和复制了个Activity.java是一致的,需要手动再添加。