首页 > 其他分享 >Android视角看鸿蒙第七课(module.json5中的各字段含义之abilities)

Android视角看鸿蒙第七课(module.json5中的各字段含义之abilities)

时间:2024-03-20 13:30:36浏览次数:35  
标签:abilities ability name 各字段 第七课 label json5 SecondAbility icon

Android视角看鸿蒙第七课(module.json5中的各字段含义之abilities)

导读

今天一起来了解module.json5中的最后一个字段,也是最复杂的字段abilities

官方文档

在这里插入图片描述Indicates all abilities in the current module. The value is an array of objects, each of which represents an ability.This label can be left blank by default,and indicates no capability exists in the current module.

字段声明

在这里插入图片描述

项目内截图

在这里插入图片描述

思考

字段要求是一个数组,描述了所有ability,类似于activity的声明。可以没有任何内容。
下面尝试两个问题:
1:EntryAbility不声明会发生什么;
2:SecondAbility不声明会发生什么;

尝试

EntryAbility不声明会发生什么

在这里插入图片描述
全部注释掉了,无警告。
运行
在这里插入图片描述

结论

entryModule中没有声明启动ability时,可以打包并安装成功,但会因为没有配置启动ability而导致没有桌面图标,同时也无法启动。
在这里插入图片描述
可以确认安装成功

SecondAbility不声明会发生什么

我们把EntryAbility的注释放开,同时把SecondAbility注释
在这里插入图片描述
在index中点击跳转到SecondAbility
在这里插入图片描述
运行
在这里插入图片描述

点击跳转的时候,没有任何提示,也不奔溃。
日志也不是特别清晰。
03-19 10:56:19.122 733-855/? I 02D01/EventLogger: OnEvent: event jsonExtraInfo is {“domain_”:“AAFWK”,“name_”:“START_ABILITY_ERROR”,“type_”:1,“time_”:1710816979113,“tz_”:“+0800”,“pid_”:26,“tid_”:61,“uid_”:5523,“USER_ID”:-1,“BUNDLE_NAME”:“com.example.myapplication”,“MODULE_NAME”:“app”,“ABILITY_NAME”:“SecondAbility”,“ERROR_CODE”:2097152, “transfer_”:1}

结论

非启动Ability不声明,会导致无法启动此Ability,但页面不会闪退,也无任何提示。日志级别也不是特别清晰。遇到类似问题,建议日志过滤START_ABILITY_ERROR

所有子字段

name
文档

在这里插入图片描述

字段声明

在这里插入图片描述
这里很重要,必须从这两个中选一个,即name必须存在。
在这里插入图片描述
有最大长度限制,不允许索引。

尝试

这里实际使用时,建议还是要和文件名相同,本着深入了解的目的,这里测试一下随意自定义name和want跳转的关系。
把SecondAbility的注释放开,同时修改name为second
在这里插入图片描述
在这里插入图片描述
want使用的abilityName先不改,看看这里的abilityName使用的是文件名还是json5中声明的名字
运行

在这里插入图片描述
跳转失败了。
换成刚刚修改过的second
运行
03-19 11:39:48.462 6087-85/? D 02D10/HiView-SysEventSource: Parser: parser raw message size=247, {“domain_”:“AAFWK”,“name_”:“START_ABILITY_ERROR”,“type_”:1,“time_”:1710819588357,“tz_”:“+0800”,“pid_”:16,“tid_”:16,“uid_”:5523,“USER_ID”:-1,“BUNDLE_NAME”:“com.example.myapplication”,“MODULE_NAME”:“app”,“ABILITY_NAME”:“second”,“ERROR_CODE”:2097177}

报错了 看看这个error是什么意思
找不到文档,换个方式
在这里插入图片描述
运行
在这里插入图片描述
绝了,啥也没有。
研究研究
发现问题了,SecondAbility和EntryAbility一样都是加载的pages/Index,模拟器上也没看出来页面切换,实际上是成功的。

新建了一个page给SecondAbility,就看出效果了。
这样的话,再改回去,name改成SecondAbility看看能不能跳转
在这里插入图片描述
不能,这回错误日志,也更加清晰了。

结论

name相当于给Ability起个别名,want跳转的时候使用的是别名,而不是文件名。
使用want,最好关注下结果,否则的话错误原因不好定位。
在这里插入图片描述
我把这个日志过滤了一下,只有这么两句,第二句还是我自己打的,第一句是Debug级别。

srcEntry
官方文档

在这里插入图片描述

字段描述

在这里插入图片描述

思考

其实很简单,String类型的Ability地址,用来正确的指向Ability文件。
在abilities字段描述中,有下图
在这里插入图片描述
其实就是srcEntrance和srcEntry二选一,我特意看了一下srcEntrance的描述
在这里插入图片描述
发现只是过期了,所以srcEntrance不再关注。

下面我们依然尝试两个问题
1、全路径行不行,带中文行不行
2、library(feature module)中的ability定义在entry行不行

尝试(全路径行不行)

在这里插入图片描述
不行,直接报错。
第二个问题也不存在了

尝试(中文行不行)

在这里插入图片描述
直接修改文件夹为中文试试
在这里插入图片描述
修改成功了,srcEntry也自动变化了。
运行看看
在这里插入图片描述
跑不起来。
还是别搞骚操作了。

结论

只能使用相对路径。带中文的不行。

description

这个字段我们在之前的文章说过,感兴趣的同学翻回去看看,这里直接上结论
之前讲description的文章

结论

在这里插入图片描述

icon&label
官方文档

在这里插入图片描述

字段描述

在这里插入图片描述

思考

讲如何修改桌面图标的文章
在上面的文章中,我们确定了桌面图标是由携带
在这里插入图片描述
这两个字段的ability的label和icon决定的。
那么为什么我新创建的ability也默认携带这两个字段呢?
会不会还有其他用处?
答案是有的
在这里插入图片描述
在运行中的任务中,两个ablity都是存在的,所以ablity并不等同于activity,而且这两个ability各自使用了各自的label及icon。

下面尝试几个问题
1、SecondAbility不配置icon及label如何展示
2、EntryAbility不配置会如何

尝试SecondAbility不配置icon及label

把second下的label注释掉
在这里插入图片描述
运行
在这里插入图片描述
若Ability不配置label和icon,则使用app.json5中的应用icon和label。

EntryAbility不配置label和icon会如何

把EntryAbility 的label和icon注释掉
在这里插入图片描述
运行

在这里插入图片描述

在这里插入图片描述

结论
1、每个ability在运行中应用列表都显示单独配置的图标及名称,若未配置则显示app.json5中配置的应用图标及名称
2、entryAbility若未配置图标及名称,默认取用app.json5中配置的应用图标和名称。

other

有点太多了,下篇文章继续讲吧。

标签:abilities,ability,name,各字段,第七课,label,json5,SecondAbility,icon
From: https://blog.csdn.net/weixin_44656996/article/details/136834152

相关文章

  • Authentication vulnerabilities
    身份验证漏洞从概念上讲,身份验证漏洞很容易理解。但是,由于身份验证和安全性之间存在明确的关系,它们通常至关重要。身份验证漏洞可能允许攻击者访问敏感数据和功能。它们还暴露了额外的攻击面,以便进一步利用。因此,了解如何识别和利用身份验证漏洞以及如何绕过常见的保护措施非常重......
  • Codeforces 1667E Centroid Probabilities
    这个连边方式就可以理解为\(1\)为根,点\(u\)的父亲\(fa_u\)满足\(fa_u<u\)。重心有不止一种表示法,考虑用“子树\(siz\ge\lceil\frac{n}{2}\rceil\)最深的点”来表示重心。令\(m=\lceil\frac{n}{2}\rceil\),\(f_i\)为节点\(i\)的\(siz\gem\)的方案数。考虑枚......
  • CodeForces 1667E Centroid Probabilities
    洛谷传送门CF传送门首先需要了解重心的三种定义:删掉一个点后剩下子树大小\(\le\frac{n}{2}\)的点\(\sum\limits_{i=1}^n\text{dis}(u,i)\)最小的点最深的\(sz_u\ge\left\lceil\frac{n}{2}\right\rceil\)的点这道题我们使用第三种定义,也就是要统计\(i\)为最......
  • appium报错DeprecationWarning: desired_capabilities argument is deprecated and wi
    不再用desired_capabilities,用options代替原来的desired_caps={"platformName":"ios","platformVersion":"11.4","deviceName":"iPhone6Plus",&......
  • procmeminfo 各字段详解
    procmeminfo各字段详解$cat/proc/meminfoMemTotal:877368kB:所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)(HighTotal+LowTotal),系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这......
  • 12.Capabilities 进阶
    deviceName只是设备的名字,别名随便起不能锁定唯一一个设备uid多设备选择的时候,要指定uid默认读取设备列表的第一个设备设备列表获取adbdevicesnewCommandTimeoutappium程序应等待来自客户端的新命令多长时间超时后==会话删除==默认 60 秒设置为0......
  • 关于使用appium自动化启动app时报错【问题:AttributeError: ‘NoneType‘ object has n
    报错原因:安装了最新版的appium3.0.0和selenium的最新版本,导致版本冲突从而导致报错:AttributeError:'NoneType'objecthasnoattribute'to_capabilities'解决方案:卸载selenium和appium,下载低版本的appium【下载appium的同时会下载依赖selenium】 pipinstall......
  • Java第七课_面向对象编程
    1.面向对象的编程对象publicclassPractice01{publicstaticvoidmain(String[]args){/*面向对象的编程,将一切事项都视为对象.对象用类来描述,过程在类里实现.使用时只需要调用类,不需要再考虑如何实现.将对象的共同特征进行......
  • Linux Capabilities 简介
    Linux是一种安全的操作系统,它把所有的系统权限都赋予了一个单一的root用户,只给普通用户保留有限的权限。root用户拥有超级管理员权限,可以安装软件、允许某些服务、管理用户等。作为普通用户,如果想执行某些只有管理员才有权限的操作,以前只有两种办法:一是通过sudo提升权限,如......
  • 第七课 创建计算字段
    7.1计算字段需要从数据库中检索出转换、计算或格式化过的数据。计算字段是运行时在SELECT语句内创建的。7.2拼接字段拼接:将值连结到一起(将一个值附加到另一个值)构成单个值。解决方法:加号(+)或者两个竖杠(||)表示。SELECTvend_name+'('+vend_country+')'FROMVendo......