0. 前言
本篇主要讲述在GKD规则编写中不必需,但常用的属性。
如果没有看过上一篇的同学,请看完上一篇哦!
1. 正文
1.1 snapshotUrls
snapshotUrls属性通常位于rules属性内,与matches属性同级。
snapshotUrls属性后接字符串,字符串的内容是快照的导入链接。
那么,什么是快照?又有什么作用?
1.1.1 快照
以下对于快照的介绍来自@Snoopy1866(锟斤拷)
GKD 使用无障碍权限获取到某个广告弹窗的界面元素信息,并可以通过快照将界面元素信息永久保存,便于规则的书写和维护。
PS:快照不同于截图。截图仅包含界面的图像信息,而快照不仅包含界面的图像信息,还包含界面的元素信息,例如控件的名称和属性,以及控件与控件之间的位置关系信息。
1.1.2 格式
snapshotUrls属性的格式为:
snapshotUrls: '快照链接'snapshotUrls属性的值也可以是数组,格式如下:
snapshotUrls: [
'快照链接1',
'快照链接2',
'...',
]请注意:快照链接必须以https://i.gkd.li/i/开头,关于如何获取该链接,可以前往@Snoopy1866编写的教程处查看
snapshotUrls属性所处的位置:
{
groups: [
rules: [
snapshotUrls: '快照链接',
],
]
}1.1.3 特殊情况
特别地,如果rules属性被简写为rules: 规则时,snapshotUrls的位置应在:
{
groups: [
rules: '规则',
snapshotUrls: '快照链接',
]
}1.2 fastQuery
fastQuery属性需要搭配网页审查工具使用。
关于网页审查工具,可以前往@Snoopy1866编写的教程处查看。
1.2.1 格式
fastQuery属性的接受的值的类型为:boolean类型,
即:true或false,
使用方法如下:
fastQuery: true,注意:当fastQuery的值为false时,fastQuery属性应省略不写
1.2.2 说明
关于fastQuery属性的说明:
1.2.2.1 什么时候使用fastQuery属性?
当rules属性内的规则的满足下列条件:
末尾属性选择器的第一个属性选择表达式符合下面的结构之一的选择器
[id='abc'][vid='abc'][text='abc'][text^='abc'][text*='abc'][text$='abc']
或者使用||将它们连接形成的逻辑表达式也符合条件,即如下格式:
[id='abc' || id='abc2'][id='abc' || vid='abc' || text='abc' || text^='abc' || text*='abc' || text$='abc']
下面给出实际示例:✅表示符合格式, ❎表示不符合格式
A > B + C[id='x'][childCount=2]✅A > B + C[childCount=2][id='x']❎A > B + C[id='x' || text='manbaout' || text*='ikun'][childCount=2]✅A > B + C[childCount=2][id='x' || text='manbaout' || text*='ikun']❎
这样一个选择器只能在右侧使用快速查询,为了在中间的子选择器也能使用
额外规定如果属性选择器如果符合上面格式并且右侧是<<n,也能在局部使用快速查找
示例:A > B + C[id='x'][childCount=2] <<n D中的C[id='x'][childCount=2] <<n可以使用局部快速查找
下面给出满足局部查询优化的示例:✅表示符合格式, ❎表示不符合格式
A > B + C[id='x'][childCount=2] <<n D✅A > B + C[childCount=2][id='x'] <<n D❎
上面介绍的是只有一个局部选择器的情况,下面给出多个局部快速查找的的示例:
如A > C[id='x'] <<n D[id='y'] <<n E,其中的C[id='x'] <<n和D[id='y'] <<n都可以使用局部快速查找
而且只有网页审查工具出现可快速查找提示(即一个对勾)时,可以使用fastQuery属性。
注意:如果选择器不存在满足快速查找的格式, fastQuery是否开启都不影响查询复杂度
1.2.2.2 fastQuery属性的位置
当
fastQuery属性与rules属性同级时,该规则组的所有规则全部使用fastQuery。可以理解为:在该规则组下全局开启
fastQuery。当
fastQuery属性位于rules属性内的其中一个对象中时,仅对该子规则集开启fastQuery。可以理解为:局部使用
fastQuery
1.3 activityIds
activityIds属性需要搭配网页审查工具使用。
这里拓展下,什么是activity?
1.3.1 activity
Android的Activity是一个应用组件,一个应用通常由多个彼此松散联系的activity组成,在这里,你只需要知道这个就足够了。
GKD的activityIds与Android的Activity是一样的。
1.3.2 介绍
activityIds属性接受一个String类型(即字符串)的值 或者 一个String类型的数组
值的内容是规则执行的activityId
1.3.2.1 activityIds属性的意义
值的内容是规则执行的activityId
如何理解这句话?
activityIds相当于是一个牢笼,将规则的生效范围局限在activityIds规定的Activity下。
比如,一个规则A,在Activity1下能正常工作,但在Activity2下误触。
这时,我们就需要用activityIds,将规则的生效范围限定在Activity1,使其不在Activity2生效
1.3.2.2 格式
使用方法如下:
activityIds: 'activityId',或
activityIds: [
"activityId1",
"activityId2",
...
],1.3.2.3 说明
类比fastQuery属性,
当
activityIds属性与rules属性同级时,该规则组的所有规则全部在activityIds规定的activity中生效。当
activityIds属性位于rules属性内的其中一个对象中时,在仅是该子规则集在activityIds规定的activity中生效。
1.4 resetMatch
resetMatch属性接受一个string类型的参数。
可选参数为:app和activity。默认为activity。
1.4.1 格式
resetMatch: 'app',
resetMatch: 'activity',1.4.2 说明
1.4.2.1 作用
resetMatch属性的作用为:规定在规则因actionMaximum等原因进入冷却后,重新开始匹配的条件。
当resetMatch的值为app时,规则冷却后,只有重新进入app才会重新开始匹配;
当resetMatch的值为默认的activity时,规则冷却后,只要activity变化,就会重新开始匹配。
请注意:activity的变化并不一定伴随着activityId的变化。
1.4.2.2 特殊情况
当resetMatch的值为activity时,一般不会写进规则中。
如:
{
resetMatch: 'activity',
rules: '',
},与
{
rules: '',
},完全等价,我们一般会选择下方的写法。
1.4.2.3 位置
类比fastQuery属性,
当
resetMatch属性与rules属性同级时,该规则组的所有规则全部使用resetMatch的设置。当
resetMatch属性位于rules属性内的其中一个对象中时,在仅是该子规则集使用resetMatch的设置。
1.5 matchTime
matchTime属性接受一个Interger类型的参数。
其参数含义为:规则匹配时间,使用的单位是毫秒。
那么为什么需要这么一个属性呢?
1.5.1 作用
我们看一下官方对其的说明:
规则匹配时间,此规则参与查询屏幕节点时,等待一段时间,休眠此规则 例如某些应用的
开屏广告的activityId容易误触/太广泛,而开屏广告几乎只在应用切出来时出现,设置一个有限匹配时间能避免后续的误触
可以看到,其是为了防止误触而出现的一个属性。
一般来说:我们仅会在开屏广告类的规则使用到它,但是在特殊情况下,其他分类的规则也会使用。
1.5.2 格式
matchTime: 10000, // 设置为 10000 是最常见的1.5.3 说明
类比fastQuery属性,
当
matchTime属性与rules属性同级时,该规则组的所有规则全部使用matchTime的设置。当
matchTime属性位于rules属性内的其中一个对象中时,在仅是该子规则集使用matchTime的设置。
1.6 actionMaximum
–TODO–


