这是一篇综述,写于2024年,整理了目前手机上主要的广告类型以及去除方式,以应对越来越流氓的广告。
本文中所提到的广告不仅限于商业推广,一切让人厌烦的元素(贴片、推送、弹窗、跳转、更新提醒等)均被视为广告。
篇幅所限,本文仅限于概括性描述,以抛砖引玉。对于每种去广告方法具体如何实施,在之后的文章中会部分展开。
广告来源
上游广告:
可以简单理解为非手机端产生、需要联网才能展示的广告。事实上大部分广告都需要联网,将“上游广告”单独列出是因为其中的一部分可以在流量入口进行拦截,从源头解决问题。
网页广告:
网页广告产生在浏览器窗口中,如在某些网站遇到的狗皮膏药一般的贴片广告,搜索引擎(尤其是某度)的推广,部分社区反复提示的登录弹窗等。网页广告主要依赖浏览器进行拦截,当然也可以从上游拦截一部分。
应用广告:
手机广告的主要形式,由第三方应用生成,包括开屏广告、贴片广告、弹窗、强制更新以及其他乱七八糟的东西。第三方应用的广告通常最难去除,为了制服这些毒瘤,本文介绍的大部分方法都需要Root权限。如果你有洁癖,还是Root吧。
系统广告:
系统广告主要包括系统的智能推荐、控制中心卡片、系统广告服务、系统互联、系统应用推送以及其他你不需要但又卸载不了的东西。尤其是系统应用,可以仗着更高的权限为非作歹。系统广告虽然可以在设置中部分关闭,但很难彻底去除。
上游广告
Hosts去广告:
Hosts是网址和IP对应的“电话簿”,在发送网址解析请求前,先去Hosts文件中查找对应的IP,如有则直接访问。通过Hosts可以将需要屏蔽的网址指向本地从而禁止访问。
安卓的Hosts文件在System分区,不宜乱动,但可以安装Systemless Hosts模块达到不修改System分区的效果。安装后可搭配Adaway之类软件,通过导入Hosts屏蔽规则来去广告。也可以直接使用内置了Hosts规则的模块。
V*N去广告:
通过设置本地代理,可以审查流量成分,过滤掉其中的广告。做的比较好的是AdGuard,可以去除大部分网页广告甚至应用广告,效果出奇。
但是一方面AdGuard收费,另一方面长时间挂代理不仅耗电而且会拖慢网速。你看现在哪有网啊,这都是代理的网,你嫌慢我还嫌慢呢。
DNS去广告:
DNS全称域名解析系统,DNS去广告原理和Hosts差不多,同样发生在地址转IP这一步,但是是在请求发送之后。相对于Hosts的优点是服务器可以随时更新规则。
推荐AdGuard Home,本来是用在路由器上的软件,后被魔改成模块,可刷入手机,从浏览器进入管理后台添加DNS规则。
路由器去广告:
在路由器上安装AdGuard Home软件,可以过滤经此路由器的所有流量,适合家庭共用。
使用时需进入路由器管理界面(Admin账户),在路由器上安装并配置AdGuard Home。
网页广告
换浏览器:
这是最重要的一步。
好的开始是成功的一半,一个合适的浏览器能让去广告过程事半功倍。手机自带的浏览器笔者建议到手就卸载——当然多数情况下没法直接卸载,可以参考后文。
对手机浏览器,笔者最推荐Via(本文主要基于Via功能展开),其次是X浏览器,最后是雨见/可拓展浏览器(注意是自有内核的雨见,而非Rains)。
如果是平板,有平板办公需求的推荐Kiwi浏览器,其余推荐Via。
选择合适的搜索引擎:
推荐简单搜索和必应,一个广告很少,另一个广告较少易于去除,没有像某度那种狗皮膏药广告。最重要的是,都是大厂出品,不至于中途跑路。
配置去广告规则:
浏览器的广告拦截功能主要依靠去广告规则。可以在为浏览器中添加网络规则,比较有名的规则合集有EasyList、EasyListChina、ADgk、混合规则精简版等。
去广告规则不是越多越好。规则多固然全面,但会存在重复,也会拖慢网页加载。一般手机浏览器加载10000~20000条规则足矣。
UA去广告:
UserAgent,简称UA,是一个包含用户信息的字符串。在浏览器发起请求时发送UA给服务器,以便返回合适格式和版本的内容。
许多广告是根据UA展示的,因此可以修改浏览器UA以屏蔽广告。如设置UA为塞班系统可以屏蔽小说网站的贴片广告,设置为简单搜索可以屏蔽百度搜索的广告。也有许多大佬定制的缝合式UA,多个愿望一次满足。
如果使用了非系统默认UA,有可能导致网页显示异常,或者导致其他去广告方式不生效。
脚本去广告:
脚本(Script)是网页中完成某些功能的特殊程序,能够修改网页显示效果,可以用来去广告。可在Greasy Fork网站搜索“去广告”,获取别人编写的脚本。也可只针对某个网站(如知乎、CSDN、简书、百度等)搜索脚本,去广告效果更好。
由于大部分脚本主要适配桌面浏览器,注意在安装前仔细阅读脚本介绍,判断是否适合移动端。
插件去广告:
雨见浏览器和Kiwi浏览器可以像桌面端一样使用插件,可以安装桌面端的去广告插件。更加推荐带有移动端优化的AdGuard去广告插件。
值得注意的是,支持浏览器插件的浏览器一般自带内核,而且插件会拖慢响应速度,总体浏览效果不是很好。
网站设定去广告:
Via和X浏览器可以针对不同的网页设置页面规则,如选择是否执行某个脚本、是否开启广告拦截、是否允许弹出式窗口、选择哪个UA、是否允许JavaScript等等。
JavaScript可以控制网页的跳转。某些网站总有自动跳转新页面的流氓广告——它不是跳不跳转的问题,它真的是那种……那种很特别的网站——这时候我们可以对此网站禁用JavaScript,以避免误触跳转。
应用广告
选择合适的应用版本:
好的开端是成功的一半——甚至会让你直接成功。如果你能找到每个应用的无广告版本,那后面的方法都不用看了。
国内应用商店安装的版本往往是臃肿的、塞满广告的,这时候不妨去找一找GooglePlay版、定制版、Lite版、旧版、小程序甚至是第三方优秀替代。
GooglePlay版:在谷歌应用商店上架的版本。由于Google的审核机制较为严格,因此国内的应用想要上架往往需要老实一点。相对国内版而言,GooglePlay版本广告还是有的,只不过没那么流氓。
定制版:即新手机刚进系统时预装的版本。大部分人都是打开手机就用,因此预装App是重要的流量入口。为了手机不至于开机即卡顿,系统厂家也会以此为筹码迫使应用厂商削减体量、减少广告——先生,你也不想自家的应用失去流量入口吧?
Lite版:如果仔细找找,部分应用还有官方开发的Lite版本。比如在GooglePlay上架的淘宝Lite版,相比国内版不仅流畅许多,而且真的一个广告都没有!
旧版:字面意思。很多应用开发着开发着就开始塞广告,因此留在旧版是个不错的选择。
小程序:有没有一种可能,京东、淘宝、拼多多、12306、滴滴打车这些常用软件都有小程序?在微信/支付宝的管理下,这些小程序也不敢太放肆。
第三方替代版:当你找来找去没有中意的官方版,为什么不试试优秀的三方替代呢?微博、知乎、B站都有不错的第三方应用。
应用内关闭:
知道你很着急去广告,但你先别急——
如果辛辛苦苦折腾半天,突然发现应用内有关闭广告的选项……
为了不走冤枉路,笔者建议在去广告之前先去应用设置中看看,把能关的都关了。
LSPosed针对性模块:
想必很多人都听说过大名鼎鼎的LSPosed框架,在这个框架下你几乎可以为所欲为。很多大佬开发了专门针对某一个应用的LSPosed模块,用于修改应用界面——不必担心,你的应用依然是带有签名的官方版,只不过改变了你所看到的界面。由于LSPosed具有Root,因此去广告效果非常好。
如果你的没有Root……Emmm……你可以在一台Root设备上(也许是别人的?)使用LSPatch,将模块集成到应用,打包为新安装包,在无Root设备上使用。
这两种模式都是LSPosed模块的正确使用方式。如果你已经Root,更推荐第一种。
LSPosed屏蔽页面元素:
如果你找不到对应的模块,还有通用的方案——上帝模式和Dia,一个是LSPosed模块,另一个也是LSPosed模块。
上帝模式可以去除你不喜欢的贴片元素,Dia可以去除弹窗,或者让一些弹窗可关闭(如强迫升级的弹窗)。不过,操作有亿点点复杂,而且效果没有专用模块那么好。
遗憾的是,上帝模式停止更新在v2.7.10(2019年)。有人又继续开发了v3版本,最高支持到安卓13。
无障碍自动跳过:
这个方法有点自欺欺人——利用无障碍服务,开屏时自动点击跳过,弹窗时自动点击关闭。
优点很多:识别率高、兼容性好、不需要Root或ADB。缺点也不少:增加耗电,容易掉后台,广告还是会闪一下,李跳跳大部分情况只能去除开屏广告,GKD支持云端规则,可以去除应用内弹窗,但是频繁的自动点击也很烦人。
没办法,没有Root就只能忍忍了。
替换Activity:
Activity,应用活动。不同的界面通常对应不同的Activity,而开屏界面和主界面往往不是同一个。为什么不直接启动应用主界面来避免开屏广告呢?
直接启动当然是可以的,可以用“创建快捷方式”工具为主界面建立桌面图标,但是这样一来每个应用都有俩图标。不如采用替换的方式,检测到开屏Activity直接替换成主界面Activity。
这方面做的比较好的是Thanox的“移花接木”功能,编写规则替换,规则可导出。
限制权限:
关闭联网权限可以让应用内部分广告失效,关闭通知可以禁用通知推送,关闭身体传感器权限可以让摇一摇广告失效,关闭自启动/关联启动可以禁止流氓软件偷偷运行……
如果你对某个应用深恶痛绝又不得不用,不如先去系统设置里把用不到的权限统统关闭,也许会有惊喜?
IFW禁用组件:
IFW,意图防火墙。应用想要启用任何一个组件时都要向系统发送请求(意图),这些请求经过IFW时,合规的被放行,不合规的被扣下(防火墙)。
相较于其他禁用应用组件去广告的方式,IFW具有安卓系统接口,拦截效果好而且不会被应用知道。
在IFW去广告方面做的最好的是Blocker,支持全盘搜索、一键禁用、云端规则等等。也可以对某个应用搜索update/upgrade关键字,从而禁用更新组件,避免烦人的更新弹窗。
修改应用:
如果你是技术大佬,上述方法同样不用看,一个MT管理器可以解决所有问题——应用不体面,你就帮他体面。
当然,毕竟大部分人只想去广告,不想研究安卓系统……那么你可以试试幸运破*器。在Root的加持下,它会自动帮你去除应用广告并重新打包。
应用内调试:
部分大型应用带有调试功能,但通过启动某些隐藏的活动,我们也可以享受开发者待遇。
比如GooglePlay版微信,使用“创建快捷方式”找到BizTestUI(未导出的活动),Root权限启动后会进入特殊界面,可以在广告入口和推送入口分别关闭朋友圈广告和订阅号推荐信息流,可惜公众号文章中的广告无法关闭。
至于国内版微信怎么办?那当然是先安装Google版,关闭广告后再用国内版覆盖安装了!
暂时冻结:
为了防止应用偷偷启动,除了微信和QQ,应用自启动权限应该是默认关闭的。但一个不愿意透露姓名的ColorOS表示已经和阿里有了py交易,淘宝和支付宝的自启动/关联启动权限都是默认开启的。就算我们手动关闭了,万一不知哪天又被偷偷打开了呢?
其实,对于这些不常用又不知哪天会用的App,可以采用暂时冻结的方法,用时即开,不用时束之高阁。
冻结应用的管理器不少,Thanxo的智能冻结、开源的雹、收费的冰箱都是不错的选择。
虚拟框架:
没有Root就只能干瞪眼吗?为什么不试试虚拟框架呢?
虚拟框架(VirtualXposed、太极等)运行在ADB环境下,可以对安装在其中的应用模拟Xposed环境,从而实现Xposed的大部分功能,属实是无Root手机的救星。
当然,理想很美好,现实很残酷。ADB毕竟比不上Root,安装在虚拟环境中的应用多多少少有点兼容性Bug,而且虚拟框架比Xposed更耗电。
更令人遗憾的是,太极也宣布了停更。开发者维术大佬表示:我要把精力放在KernelSU上.jpg。
系统广告
设置内关闭:
与第三方应用类似,系统广告也有可能在设置或者应用内关闭。当然有的也隐藏的非常深,需要把设置翻个底朝天才能找到。某些系统应用在桌面上没有卸载按钮,进入应用管理中却有可能可以卸载。
禁用系统应用:
对于前文中提到的自带浏览器,以及阅读、音乐、视频等等这些系统全家桶,虽然挨了工信部铁拳,现在大都可以停止服务了,但总有那么一两个无法卸载的。此外还有许多系统组件,如设备互联、全局搜索、各种“智慧能力”之类的大部分人用不到的功能。这些东西占存储不说,还总在后台运行或者推送。
借助ADB权限,可以用 disable-user 0 +包名 停用这些组件,桌面图标也会随之消失。开发者模式下可以用无限调试激活Shizuku来授权ADB。鸿蒙没有无限调试可以连接电脑,使用鸿蒙工具箱或者搞机工具箱操作。
ADB可以停用大部分系统应用,至于应用商店之类的只能使用Root停用。
模块修改与美化:
许多大佬开发了针对系统的专用优化模块(LSPosed或者Magisk模块),如ColorOS的LuckyTool。
这些模块提供的选项中也含有去广告功能,可以对一些顽固广告进行整治。
刷第三方系统:
包括自己打包和他人制作的系统,适用于有一定相关知识的朋友。
由于笔者水平有限,缺漏在所难免,还望广大朋友补充和指教。