• Android视角看鸿蒙第四课(module.json中的各字段含义之description&mainElement)修改程序入口


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

  • 相关阅读:
    TypeScript内置类型有哪些?
    CP Autosar-ETH Driver配置
    神经网络简介
    【C#】Mapster对象映射的使用
    Nginx学习笔记05——Nginx虚拟主机配置
    单元话题写作-Unit 1 英语学习
    LeetCode第225题—用队列实践栈
    门面/外观模式
    MySQL排序知识点 + 牛客-SQL必知必会-02排序检索数据篇:SQL63、64、65、66
    Linux系统之信号
  • 原文地址:https://blog.csdn.net/weixin_44656996/article/details/136552318