最近买了一台安卓手机, 第一次使用安卓机. 感觉系统到处都是广告, 以前有人戏称MIUI为ADUI, 果然名副其实.

于是先找到一款清理广告的软件MiuiCleaner, 安装使用方式不表.

后又发现有一款名为"李跳跳"的软件屏蔽广告颇为强大, 下载之后发现还可以自定义规则. 于是学习了一番.

首先需要一些前置知识

pre

控件的id和bounds

我们把APP界面上的元素,比如按钮、图标、输入框这些统称为控件。比如取消按钮它就是一个文本控件,它的文字就是取消。我们写规则时可以根据取消这两个字来定位这个按钮。但有些按钮它是没有文字的,比如上面美团弹窗的叉号按钮。此时我们需要用到控件的id或bounds来定位这些没有文字的按钮。

但什么是控件的id和bounds呢?控件的id就是控件的身份证(普通用户可以简单这样理解);控件的bounds就是控件的大小和位置信息。

id可以没有, 但是bounds一定存在!

如何获取控件的id或bounds

可以用autojs, 哈哈哈这里又需要设计到autojs的前置知识, 我正打算系统学一下, 之后会再记录一下, 这里暂时不表

自定义规则

开屏广告规则

{"keywords":["xxx"]}{"keywords_append":["xxx"]}
当我们遇到无法跳过的开屏广告时,可以使用这条规则:{"keywords":["xxx"]}。其中xxx可以是跳过按钮的文案,比如{"keywords":["关闭广告"]};也可以是跳过按钮的id或bounds,比如:{"keywords":["tv_close_button"]}、{"keywords":["900,160,1170,250"]}。

参数 keywords 和 keywords_append 的区别:

keywords 会覆盖默认规则。

keywords_append 在默认规则的基础上,追加规则。

弹窗规则

{"popup_rules":[{"id":"xxx","action":"xxx"}]}
我们也可以使用李跳跳来关闭应用内的弹窗 ,比如下图所示的抖音更新弹窗,就可以用{"popup_rules":[{"id":"检测到更新","action":"以后再"}]}规则进行关闭。这条规则的意思是:当检测到「检测到更新」这几个文字的时候,就自动点击「以后再」这个按钮。

规则里面的文字默认情况下是模糊匹配的。比如改成以后、以后再说、再说,甚至后再都是可行的。

除了模糊匹配的,也支持首尾匹配和全匹配,只需在文字前面加上特定的符号就行。参照下面的举例张三,比如+检测到的意思是匹配以检测到开头的文字;比如-用户体验的意思是匹配以用户体验结尾的文字;比如=以后再说的意思是匹配和以后再说完全相等的文字。其中符号&是用来连接任意个条件的,你可以把它理解为且。

有时候我们会遇到一些弹窗,它们的关闭按钮不是文字,而是一个叉号❎ ,比如下图所示的美团弹窗,此时我们又该如何写规则呢?

image.png

分两种情况: 如果这个弹窗可以通过手机的返回键关闭,我们可以这样写规则{"popup_rules":[{"id":"=天天神券","action":"GLOBAL_ACTION_BACK"}]}。其中的GLOBAL_ACTION_BACK是固定不变的。

如果这个弹窗不可以通过手机的返回键关闭,我们需要知道叉号的id或bounds才行。假设这个弹窗的叉号的id是tv_close_button,我们可以这样写规则{"popup_rules":[{"id":"=天天神券","action":"tv_close_button"}]}。

但很多时候叉号(弹窗的关闭按钮) 不一定会有id,不过也没关系,因为它一定会有bounds。假设叉号的bounds是500,900,620,1020,我们可以这样写规则{"popup_rules":[{"id":"=天天神券","action":"500,900,620,1020"}]}

综合运用

有些任务是持续任务,它们的耗时是不确定的,至少需要两条规则表示才行。比如有一个按钮需要倒计时100秒后才能点击,此时我们可以这样写规则:

把这个过程的中间态用一条规则表示:{"id":"还剩&秒","action":"还剩&秒",times:0}
把我们需要点击的按钮用一条规则表示:{"id":"弹窗","action":"关闭按钮"}
设置参数unite_popup_rules的值为true。
所以如果想点击一个100秒后才能点击的按钮,完整规则应该是:{"popup_rules":[{"id":"还剩&秒","action":"还剩&秒",times:0},{"id":"弹窗","action":"关闭按钮"}],"unite_popup_rules":true}