手机为什么能"自动跳过"开屏广告?李跳跳、GKD 与 iOS 代理软件原理盘点
💡 每天打开 App 的那 5 秒钟,大概是国内移动互联网最统一的体验:一张全屏素材、右上角一个越点越小的"跳过"、外加"摇一摇跳转详情页"。
为了干掉它,安卓用户在装李跳跳、GKD 这类"自动点击器";iOS 用户装不了这些,于是转去折腾 Surge、Quantumult X、Stash 这类代理软件。两条路子看起来都是"去广告",其实是完全不同的两层技术。
这篇文章就按拦截位置把它们拆开:每一层到底拦住了什么、李跳跳为什么停更、苹果手机为什么只能靠代理软件、各自的优缺点,以及如果是我,我会怎么选。
1. 先把开屏广告拆开看:它是怎么"渲染"出来的
很多人以为开屏广告是系统行为,其实它是 App 自己在客户端渲染的一段普通逻辑。
text
冷启动 --> 广告位实时竞价(bid) --> 素材 URL 下发 --> 客户端拉图/拉视频
--> 渲染到 View 层(独立 SplashActivity 或覆盖在首页上的一个全屏 View/Window)
--> Handler 驱动倒计时 5s + 右上角一个真实 TextView/Button("跳过")
--> 命中热区或"摇一摇" --> deeplink / universal link 跳电商
这里有两个细节值得注意:
- 跳过按钮是一个真实控件 。它不是贴图,而是节点树里一个可点击对象,有
text="跳过"、有viewIdResourceName。 - 广告内容是网络请求换来的 。素材接口返回的 JSON 里如果
ads是空数组,客户端通常直接进首页------这段逻辑在客户端手里,不在系统手里。

Q1:为什么安卓能"自动点",iOS 就不能?
差别就在这一层:
text
Android: AccessibilityService --> rootAccessibilityNode --> 按 text/id 找节点 --> performAction(ACTION_CLICK)
iOS : 没有任何公开 API 让 A App 去点 B App 界面上的按钮
无障碍服务本质是给读屏(TalkBack 这类)用的,它能把别的 App 的界面读成一棵树,也能对这棵树下发点击。于是"帮视障用户读屏"的能力,被顺手用来"替用户点跳过"。iOS 侧沙盒更严、没有等价物,所以 iOS 只能往网络那一层退------要么让广告请求失败,要么让响应变空。

2. 四层拦截:DNS、代理隧道、MITM、UI 层
把一次开屏广告的生命周期摊开,能下手的地方其实只有四个。
| 拦截层 | 具体做法 | 拦住什么 | 拦不住什么 | 需要 Root |
|---|---|---|---|---|
| DNS 黑洞 | 安卓「私人 DNS」填过滤服务;hosts 把广告域名指到 127.0.0.1 |
素材域名解析,请求直接失败 | 已缓存素材、IP 直连、同主域接口 | 否 / 是 |
| 本地 VPN 隧道 | Surge / QX / Stash / Clash 系,用 NetworkExtension 起本地隧道做 DNS 分流 + 规则匹配 |
按域名/规则集拦整类请求 | 走主域名的原生渲染广告 | 否 |
| HTTPS MITM 改写 | 装并信任 CA,解密指定域名,改响应体或直接 canned 空返回 | 让客户端以为"没采到广告" | 做了 SSL Pinning 的 App | 否 |
| UI 层自动化 | 无障碍/代理辅助服务点掉跳过按钮 | 已经渲染出来的广告 | 无渲染帧可点的纯软广 | 否 |
一句话理解:
text
DNS / 代理 --> 不让广告素材下载下来 (网络层,通用、便宜、但会漏)
MITM 改写 --> 让它下载到"空广告" (最强,但最危险)
UI 自动化 --> 让它下下来,再替我点跳过 (最稳,但只有安卓能干)

3. 安卓路线:李跳跳、GKD 这类"自动点击"
它们不是去广告,而是"帮你把手点出去"。
3.1 机制:无障碍服务 + 规则匹配
text
注册 AccessibilityService
--> onAccessibilityWindowChanged 感知"某个 App 的前台窗口换了"
--> 从 window.root 深度遍历节点树
--> 用规则匹配节点:text / textContains / id / cls / desc / 位置 / 父子关系
--> 命中可点击祖先 --> performAction(ACTION_CLICK)
--> 没命中就等下一次事件轮询(几百毫秒级)
所以这类工具的"实力"完全等于规则库的质量 :同一个"跳过",有的 App 写成 TextView、有的写成一个没有文字的 View + 透明热区,规则就得分别为它写一条。
3.2 两个代表
- 李跳跳:把这条路走红的产品,规则按 App 的 Activity/控件属性组织,另有一套"通用作案"兜底。2023 年 8 月无限期停更(作者收到律师函,理由是干扰产品正常运行、涉嫌不正当竞争),最后正式版停在 2.2。包体和 APK 在社区里仍有备份,规则失效后靠自己补自定义规则还能战。
- GKD :现在事实上的续命方案,GitHub 开源(GPL-3.0,包名
li.songe.gkd),截至 2026 年 10 月仍在高频提交,约 4.3 万 star,最新 release v1.12.1(2026-05-20)。它把上面那套换成了三件东西:类 CSS 的高级选择器 + 订阅制 JSON 规则 + 快照审查(把屏幕节点树导出来对着快照写规则)。
一条真实风格的 GKD 规则长这样:
text
@[vid="menu"] < [vid="menu_container"] - [vid="dot_text_layout"] > [text^="广告"]
读法很直白:锚定 vid=menu 的节点,往父方向走,再找子孙里文本以"广告"开头的那个,点它。相比李跳跳的"内置一堆现成规则",GKD 官方仓库甚至不提供规则 ,全靠社区订阅(第三方订阅仓库 AIsouler/GKD_subscription 约 1.2 万 star)------灵活度高很多,代价是要自己配。
3.3 优缺点
优点
- 对已经渲染出来的广告最有效,不用猜域名,也不会因为接口变动而整块失效;
- 顺带能处理开屏之后的弹窗、优惠券浮层、更新提示、"不同意就退出"这类垃圾流程;
- 免 Root、免付费,规则可以精确到单个 App 的单个控件。
缺点
- 权限极大:无障碍能读到你屏幕上的一切内容(聊天、验证码、支付页),规则一旦误命中还可能替你点别的东西;
- 误点风险真实存在:为了抢热区,很多广告把可点区域做到几乎全屏,自动点击很容易直接跳进电商页;
- 维护成本高:App 改版、控件 id 变化,规则就得跟着改;
- 政策风险:它依赖的能力随时可能被收紧(见第 6 节),李跳跳本身就是这条路的第一个牺牲品。
4. iOS 路线:代理软件与"让请求失败"
苹果这边没有 UI 层这条路,于是全部技术都压在网络层。
4.1 DNS 黑洞:成本最低的一层
iOS 14 之后可以在「设置 - DNS」配加密 DNS,Android 则是「更多连接 - 私人 DNS」,填域名即可(例如公共过滤服务 dns.adguard-dns.com)。原理一句话:把广告域名解析成 NXDOMAIN,素材下不来,多数 App 的兜底逻辑就是"无广告,直接进首页"。
- 优点:全设备生效、零成本、无需证书;
- 缺点:只能覆盖域名级,对 IP 直连、内置素材、同主域接口无能为力;而且 iOS 上系统级加密 DNS 配置需要描述文件,实际多用代理 App 内部的 DNS 模块替代。
4.2 "代理软件"到底是什么角色
Surge、Quantumult X、Loon、Stash(Clash 内核的 iOS 图形客户端)、Mihomo/Clash 系这些 App,本来是做网络调试与代理分流的工具,它们有一项别的能力:用系统提供的 NetworkExtension 在本地起一条隧道,所有 App 的流量都要经过它。
text
App 请求 --> NEPacketTunnelProvider(本地隧道)
--> DNS 模块: 命中广告域名 --> 直接拒解析(黑洞)
--> 规则匹配: DOMAIN-SUFFIX / URL-REGEX --> REJECT 或 PROXY
--> (可选) MITM: 命中域名做 TLS 解密 --> 脚本/改写返回空 JSON
所以"苹果手机装代理软件跳开屏广告"其实是:把广告域名塞进规则集的 REJECT 段,效果等价于一个能自定义、带正则、还能按策略组切换的 hosts 文件。它不需要越狱、不需要 Root,这是它在 iOS 上流行的根本原因------iOS 没有别的口子。
4.3 MITM 改写:能"真跳过",也最危险
对那种"请求不发就会报错/卡在启动页"的 App,只有改响应才行:信任该工具生成的 CA 证书,在配置里把广告接口域名列入 mitm hostname,再用脚本或 rewrite 把返回体里的素材数组置空 / 直接 canned 一个空响应。客户端拿到"请求成功、零素材",于是干净进首页。
代价也很直接:
- 信任 CA = 这些域名下的全部 HTTPS 内容对这条隧道明文可见;
- 银行、证券、部分大厂 App 做了证书校验(SSL Pinning),要么解不开,要么解开后 App 直接拒绝运行;
- 节点/订阅的出口风险:免费订阅可能有日志、可能跑路,本质上是把流量交给陌生第三方;
- 部分 App 检测到代理环境会限制功能。
4.4 Q:快捷指令能跳过开屏广告吗?
不能------至少不是"自动点掉"意义上的跳过。iOS 自动化没有点击第三方 App 界面按钮的能力,网上那套教程是让快捷指令去做别的事(比如启动时先打开一个空白页占位,或者把"跳过"这件事变成"手按一次侧键"的肌肉记忆)。
苹果自己动过一次手,而且比任何插件都有效:iOS 27.2 Beta 2(2026-09-23)在中国区加了 Restrict Motion Data(限制运动数据) 开关,直接掐住加速度计和陀螺仪的喂数,"摇一摇/扭一扭跳转"这类交互随之失效,豆瓣、知乎、百度网盘等都被点名。这是少数"官方反制",而且它反制的是广告主,不是工具。
5. 优缺点横向对比
| 方案 | 平台 | 拦截层 | 覆盖率 | 成本 | 配置门槛 | 主要风险 |
|---|---|---|---|---|---|---|
| 李跳跳 | Android | UI 层(无障碍) | ⭐⭐⭐⭐⭐ | 免费 | 低 | 已停更,规则失效只能手动补 |
| GKD | Android | UI 层(无障碍+选择器) | ⭐⭐⭐⭐⭐ | 免费开源 | 中 | 无障碍权限过大;Android 17 收紧 |
| 私人 DNS / 加密 DNS | 双端 | DNS | ⭐⭐ | 免费 | 极低 | 漏得多;可能影响解析排障 |
| hosts + AdAway / Magisk | Android(Root) | DNS/本机解析 | ⭐⭐⭐ | 免费 | 高(要 Root) | 需维护 hosts,Root 影响保修与银行 App |
| AdGuard / AdGuard DNS | 双端 | DNS + 浏览器内容过滤 | ⭐⭐⭐ | 订阅制 | 低 | iOS 侧受系统扩展能力限制,App 内原生广告拦不住 |
| 代理软件规则(Surge/QX/Loon/Stash) | iOS/Android | DNS + 域名规则 | ⭐⭐⭐ | 付费买断 | 中 | 依赖订阅质量;出口可信度 |
| 代理软件 + MitM 改写 | iOS/Android | HTTPS 响应改写 | ⭐⭐⭐⭐⭐ | 付费买断 | 高 | 信任 CA、证书校验冲突、App 闪退 |
| 系统开关(运动数据/跳转拦截) | iOS/部分 Android | 传感器与跳转 | ⭐⭐(仅摇一摇) | 免费 | 极低 | 只管交互,不管素材 |
说明:覆盖率按"能干掉多少比例的开屏/弹窗广告"给的个人主观评级,只算了常见的原生开屏,不含信息流广告。
笔者(后端 & 架构)的实际策略:
| 需求 | 我会选 |
|---|---|
| 只想安静用机,不想折腾 | 系统自带的跳转/传感器开关 + 私人 DNS |
| 安卓、能接受装第三方 App | GKD(无障碍)+ 一份活跃订阅,别装来路不明的小厂"自动跳过" |
| iOS、不想折腾证书 | 代理软件纯 DNS/规则黑洞模式(不启用 MitM) |
| iOS、要"真的不出现" | 代理软件 + 只对少数域名开 MitM,其余全部走 DNS 层 |
| 装过银行/证券 App 的机子 | 不要长期挂 MitM,用完即关 |
6. 几个绕不开的现实问题
Q1:这是不是违法?
个人使用不构成违法,但提供工具这一侧有判例。视频网站起诉带广告拦截功能的浏览器和厂商是不正当竞争的老戏:芒果TV 诉傲游浏览器屏蔽广告获赔 52 万元,同类诉讼也打到过小米、百度;李跳跳收到律师函后无限期停更,是同一逻辑落到"自动点击"工具上的版本。厂商主张通常落在《反不正当竞争法》第十二条的"妨碍、破坏他人产品正常运行"上。工具作者停更、仓库下架、规则转社区------这是这条路最现实的结局。
Q2:为什么标准没把"摇一摇"管住?
因为阈值可以被绕过。全国网络安全标准化技术委员会 2025-07-22 发布的《网络安全标准实践指南------摇一摇广告触发行为安全要求》写死了三个数字:加速度 ≥ 15 m/s²、转动角度 ≥ 35°、持续时间 ≥ 3 秒才算一次有效触发。但工程上想误触发太容易了------阈值踩线设置、走路时的自然抖动就够,素材层再叠一个全屏热区,标准管的是下限,管不住上限。
Q3:这条路以后还好走吗?
系统正在从两头收口,这也是我认为 UI 层自动化会逐步退场的原因:
text
2023-08 李跳跳无限期停更(法律压力)
2026-03 Android 17 Beta 2 限制第三方调用无障碍 API("高级保护模式",直指自动点击/跳广告类滥用)
2026-09 iOS 27.2 Beta 2 中国区 Restrict Motion Data,掐掉摇一摇的传感器输入

趋势很清楚:平台愿意替你干掉"跳转",但不愿意替你干掉"广告"。第三方工具的生存空间在压缩,无障碍这条路一旦在 Android 17 上被真正封死,安卓用户也会被迫退到 DNS/代理那一层------那时候两端的做法就合流了。
最后总结
- 只是不想被误跳转:先开系统开关(iOS 运动数据限制、各家的跳转确认),这是免费的,而且合法、零风险。
- 安卓 + 愿意折腾 :GKD 依然是当下最优解,规则精确到控件;但要清楚你交出的是无障碍权限,来源不明的 APK 和订阅一律别装。
- iOS :别指望"自动点击",这条路苹果封死了;代理软件 = DNS 黑洞 + 域名规则 ,够用且相对安全;MitM 改写能治到根上,但它是拿"信任一张 CA"换的,只在明确需要的域名上开。
- 如果你是后端/架构,我更建议你关注另一件事 :开屏广告本质是一次
竞价 + 素材下发 + 客户端渲染,所以所有拦截手段都能被"改渲染策略"反制------比如把素材打包进 APK、把跳过做成无文本 View。这场博弈的胜负不在权限大小,而在谁改得快。 - 至于"去广告"这件事的终点:我倾向于把它理解成一次权限与风险的交换,不是免费午餐。你要么交出无障碍,要么交出一张根证书,要么交出流量的出口。
参考资料 & 致谢
3 GKD 第三方订阅规则 - AIsouler/GKD_subscription
8 Surge 官网
11 全国网络安全标准化技术委员会《实践指南》规范摇一摇广告 - 网易新闻