点击显示更新信息
2019.3.14 更新
- 当官方规则 API 返回空数据时跳过添加官方规则
- 添加显示单个订阅规则调试(可能有误差)以及添加进度
- 使用 YUX-IO/ffp 的 demo 服务 https://ffp.yux.io/ 代理下载规则,加速规则下载。(代理无法使用时会回退使用原地址)
- 增加自动替换、防覆盖功能(防覆盖需要 chattr 命令支持,magisk 用户可以将
/sbin/.magisk/busybox/chattr
链接到 /system/xbin/chattr
) - 添加 github gist 地址。
点击显示 Gist
一直以来我都是把自带浏览器删除用 via 替换的,但 MIUI 在某个版本升级后如果卸载了自带浏览器会导致快应用闪退,刚好 MIUI 浏览器更新了简洁模式界面还不错,就决定用回自带浏览器了。
当然即便是启用简洁模式也还是有很多不好的地方,比如菜单栏的广告、搜索栏热点推荐、无法自定义搜索引擎等等。习惯性去数据目录看看,发现了对应的配置文件,既然是需要从本地读取那就好办了,直接把文件内容清空去掉读写权限,设置不可更该属性就好。
MIUI 浏览器的去广告功能还是很强的,规则文件存储在 /data/data/com.android.browser/files/data/adblock/
目录下,其中 miui_blacklist.json
就是规则文件了,打开看可以看到存储规则是这样的
1 2 3 4 5 6 7 8
| { 'effectiveTime': int(time.time() * 1000), 'flag': 0, 'id': id, 'network': 255, 'rule': line, 'updatetime': int(time.time() * 1000) }
|
其中最重要的就是 rule 项,由于文件过大,内容还都是压缩的,我就没仔细看了,直接试着将 PC 上的去广告规则添加进去,经测试是有效的,所以最终有了这篇文章。
既然知道可以使用 PC 上的 ABP 规则,那么接下来就是将 ABP 的规则添加到 MIUI 自带规则中去,这里我选择使用 Python 来处理。从前面我们知道了一条规则的内容,接下来就很好办了,先将自带的规则导入,然后遍历 ABP 规则,把除头部及注释的内容,按上面的格式拼接,其中 effectiveTime 和 updatetime 均为距 1970 年的秒数(自带规则里这两个的值是不一样的,这里为了方便使用同一个值),使用 time 模块的 time 获取毫秒数将其乘以 1000 取整即可,然后 append 到自带规则中即可,最后再 dump 到文件中。至此就大功告成了。
另外还有个白名单文件,建议把它清空。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| import json import time import zipfile import tempfile from urllib import request
miui_api = 'https://api.browser.miui.com/bsr/adRuleBlock/miuiadblock' sub_urls = ['https://easylist-downloads.adblockplus.org/easylistchina.txt', 'https://easylist-downloads.adblockplus.org/easyprivacy.txt', 'https://easylist-downloads.adblockplus.org/easylist.txt', 'https://raw.githubusercontent.com/xinggsf/Adblock-Plus-Rule/master/ABP-FX.txt', 'https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt', 'http://tools.yiclear.com/ChinaList2.0.txt' ]
print("正在从 MIUI API 获取数据下载地址") req = request.Request(miui_api) res = request.urlopen(req).read().decode('utf-8') print("地址获取成功")
res = json.loads(res) tmpdir = tempfile.mkdtemp() print("正在下载压缩包") req = request.Request(res['miuiadblock']['download_url']) res = request.urlopen(req).read() tmpfile = tmpdir + '/' + 'tmp.zip' with open(tmpfile, 'wb') as f: f.write(res) print("压缩包下载完成,开始解压") file_zip = zipfile.ZipFile(tmpfile, 'r') file_zip.extractall(tmpdir) print("解压完成,开始数据合并") print('*'*50) miui_blacklist = tmpdir + '/' + 'blacklist.json' default = json.load(open(miui_blacklist, 'r'))
id = 66666 for url in sub_urls: filename = url.split('/')[-1] req = request.Request(url) while(True): try: print("正在下载 %s" % filename) res = request.urlopen(req).read().decode('utf-8') if(res): print("开始添加 %s" % filename) for line in res.split('\n'): if(not (line.startswith('[') or line.startswith('!'))): data = { 'effectiveTime': int(time.time() * 1000), 'flag': 0, 'id': id, 'network': 255, 'rule': line, 'updatetime': int(time.time() * 1000) } default['data'].append(data) id += 1 print("%s 添加完成" % filename) break except Exception as err: print(err) print('sleep 3s') time.sleep(3) json.dump(default, open('miui_blacklist_opt.json', 'w'))
|
最后再分享个去除 QQ 自定义字体、礼物特效;修改 MIUI 浏览器搜索引擎;去除 X5、TBS 内核 的 shell 脚本
点击显示 Gist