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是一致的,需要手动再添加。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: