Fulguris广告拦截源码深度剖析:ABP过滤器匹配引擎完整指南

发布时间:2026/8/23 14:43:05

Fulguris广告拦截源码深度剖析:ABP过滤器匹配引擎完整指南
Fulguris广告拦截源码深度剖析ABP过滤器匹配引擎完整指南【免费下载链接】Fulguris⚡Web Browser项目地址: https://gitcode.com/gh_mirrors/fu/FulgurisFulguris 是一款极致轻量的开源 Android 浏览器它的广告拦截能力完全构建在 ABPAdblock Plus过滤器语法之上。这篇文章将带你深入 Fulguris 源码拆解从网络请求拦截到过滤器匹配引擎的完整链路为什么它能毫秒级判定一个请求是广告被拦截的广告又是怎么被空资源替换的即使你从未读过 Kotlin也能看懂这套匹配引擎的设计精髓。Fulguris 广告拦截模块整体架构广告拦截的全部代码集中在两个包中模块路径职责拦截管理器AbpBlockerManager.kt请求入口、第三方检测、响应生成判定引擎AbpBlocker.kt五级优先级决策链用户规则AbpUserRules.kt类似 uBo 的动态过滤列表更新AbpListUpdater.kt下载/解析 EasyList 等过滤列表匹配引擎FilterContainer.kt标签索引 域名哈希查找统一过滤器UnifiedFilter.kt内容类型/第三方/域名三重校验匹配引擎部分源自 Yuzu 浏览器并做了深度优化位于app/src/main/java/jp/hazuki/yuzubrowser/adblock/目录。第一关拦截每一个网络请求一切从AdBlocker接口开始。AdBlocker.kt 只定义了一个方法shouldBlock(request, pageUrl)——浏览器每发起一个资源请求都会先问它这个请求能放行吗AbpBlockerManager.kt 的shouldBlock做了三件关键事白名单短路特殊 URL、应用内 scheme、favicon 缓存目录直接放行不进入匹配流程构造ContentRequest把原生请求包装成引擎能理解的结构包含 URL、页面主机、内容类型位掩码、第三方标志第三方判定用 PublicSuffix 公共后缀库比较两个域名的 effective TLD1 是否相同结果放入容量 100 的 LRU 缓存避免重复计算内容类型用位运算表示定义在 ContentRequest.kt脚本是0x02、图片是0x04、文档是0x20……多个类型可以用or组合一次位与运算就能判定类型是否命中。第二关ABP 过滤器匹配引擎如何工作引擎的核心是FilterContainer——一个按标签分桶的哈希表。每条 ABP 过滤器加载时会由 Tag 类 根据模式生成最优标签纯域名过滤器标签就是域名本身同标签的过滤器用next指针串成链表。匹配时 FilterContainer.get 分两条快速路径域名链查找从请求域名的完整形式逐级向上截取ads.example.com→example.com→com每一级只做哈希表 O(1) 查找——这正是||example.com^这类规则秒判的秘诀标签桶遍历若容器混有非域名规则再按请求 URL 生成的标签集合遍历对应桶命中候选过滤器后UnifiedFilter.isMatch 执行三重短路校验contentType and request.type位与运算——类型不符直接返回 falsecheckThird——是否匹配第一方/第三方约束checkDomain——页面域名是否在过滤器的域名白/黑名单内全部通过才比对 URL 模式忽略大小写的规则会预先小写化 URL避免运行时重复转换。此外容器还维护一个domainOnly标志纯域名列表可以跳过标签遍历源码注释标明这让加载提速 20–50%。第三关五级优先级的决策链AbpBlocker.shouldBlock 是整条链路的大脑判定顺序严格遵循 ABP 规范用户规则 → important白名单 → important拦截 → 普通白名单 → 普通拦截 → 修改过滤器各桶的文件前缀定义在 AbpUtils.ktb_拦截、w_白名单、i_/ia_important 拦截/放行、m_/me_修改/修改例外以及r_/re_重定向。其中有个容易忽略的细节important 拦截会被页面级例外规则否决第 30–35 行这与 AdGuard 官方文档的行为保持一致。而用户规则拥有最高优先级——AbpUserRules.kt 实现了 uBo 风格的动态过滤每条规则就是一个独立过滤器以页面主机作为标签实现只在这个网站屏蔽这个域名的精细控制。第四关被拦截的请求去哪了拦截不等于拒绝而是资源替换。AbpBlockerManager.kt 按内容类型返回不同的空包图片 → 1x1 透明 gif脚本 → 空noop.js媒体 → 静音的noop-0.1s.mp3iframe → 空noop.html这些占位资源存放在app/src/main/assets/blocker_resources/BlockerResponse.kt 还支持把 Google Analytics、Chartbeat 等追踪脚本重定向到对应的解毒空脚本。若是主框架整个页面被拦则生成一个自带样式的说明页展示被拦 URL 和拦截原因恶意软件列表/广告列表/用户规则见 createMainFrameDummy。进阶能力修改过滤器与列表自动更新修改过滤器能做的不止拦截。removeparam可以剥离 URL 中的追踪参数如 Facebook 的fbclid$header系列可以增删请求/响应头。当 ModifyResponse 生效时浏览器会用 OkHttp 重新发起修改后的请求——因为WebResourceRequest本身不可变只能代理转发。过滤列表更新由 AbpListUpdater.kt 负责用If-Modified-Since头做增量检查服务器返回 304 即跳过下载尊重仅 Wi-Fi 更新设置流量计费网络不自动更新列表若不是 ABP 格式自动回退到 HostsFileParser 解析 hosts 文件加载时用bf_badfilter 前缀清洗误杀规则并把各列表合并去重成联合列表避免每次请求重复扫描多个文件总结这套广告拦截引擎值得学什么位掩码代替 if-else内容类型、第三方属性全部用整数位运算判定成本趋近于零哈希分桶 域名链纯域名规则只需几次哈希查找这是大规模列表仍保持流畅的关键五级决策链用户规则 important 白名单 黑名单语义清晰且易于扩展资源替换而非粗暴拒绝按类型返回占位资源页面布局不会塌陷从 AbpBlockerManager.kt 的请求入口到 FilterContainer.kt 的匹配核心Fulguris 用不到千行代码实现了一个教科书级的 ABP 过滤引擎——对想理解浏览器广告拦截原理的你来说这是绝佳的学习样本。【免费下载链接】Fulguris⚡Web Browser项目地址: https://gitcode.com/gh_mirrors/fu/Fulguris创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ImagePicker 完全入门指南:为什么它是 Android 图片选择器开发的首选方案

ImagePicker 完全入门指南:为什么它是 Android 图片选择器开发的首选方案

2026/8/23 14:43:05

ImagePicker 完全入门指南:为什么它是 Android 图片选择器开发的首选方案 【免费下载链接】ImagePicker A customizable library for selecting images on the device. 项目地址: https://gitcode.com/gh_mirrors/imagepi/ImagePicker ImagePicker 是一个专为…

QtAdb图形化ADB工具完整指南:从连上设备到Recovery侧载,全程点鼠标

QtAdb图形化ADB工具完整指南:从连上设备到Recovery侧载,全程点鼠标

2026/8/23 14:43:05

QtAdb图形化ADB工具完整指南:从连上设备到Recovery侧载,全程点鼠标 【免费下载链接】QtAdb 项目地址: https://gitcode.com/gh_mirrors/qt/QtAdb 想装Shizuku,却卡在"先配环境变量、再敲adb命令"这步?图形化ADB…

自建行为探针教程:6步用 gpt56_api_detector 探针生成器计算 S、D、w 参考基线

自建行为探针教程:6步用 gpt56_api_detector 探针生成器计算 S、D、w 参考基线

2026/8/23 14:43:05

自建行为探针教程:6步用 gpt56_api_detector 探针生成器计算 S、D、w 参考基线 【免费下载链接】gpt56_api_detector 用于检测api是否路由真实gpt5.6模型 项目地址: https://gitcode.com/gh_mirrors/gp/gpt56_api_detector gpt56_api_detector 是一款在本机运…

3 分钟拿到全量成就数据:YaeAchievement 原神成就导出实战指南

3 分钟拿到全量成就数据:YaeAchievement 原神成就导出实战指南

2026/8/23 15:53:08

3 分钟拿到全量成就数据:YaeAchievement 原神成就导出实战指南 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 上周末清完新地区的成就,我想看看自己的总体完成度&a…

为什么你的C盘越用越小?用Driver Store Explorer做驱动清理的完整指南

为什么你的C盘越用越小?用Driver Store Explorer做驱动清理的完整指南

2026/8/23 15:53:08

为什么你的C盘越用越小?用Driver Store Explorer做驱动清理的完整指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 如果你的 C 盘空间总是莫名其妙地减少,而&…

ComfyUI 缺的 85 个节点,ComfyUI_essentials 一次补齐:从卡壳到出图一条链

ComfyUI 缺的 85 个节点,ComfyUI_essentials 一次补齐:从卡壳到出图一条链

2026/8/23 15:53:08

ComfyUI 缺的 85 个节点,ComfyUI_essentials 一次补齐:从卡壳到出图一条链 【免费下载链接】ComfyUI_essentials 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_essentials 你拖了两张图想拼到一张画布上,右键菜单翻了三遍&a…

为什么Falcon-40B-Instruct是最强开源大语言模型?AI新手终极入门指南

为什么Falcon-40B-Instruct是最强开源大语言模型?AI新手终极入门指南

2026/8/23 15:53:08

为什么Falcon-40B-Instruct是最强开源大语言模型?AI新手终极入门指南 【免费下载链接】falcon-40b-instruct 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/falcon-40b-instruct Falcon-40B-Instruct 是 TII(阿联酋技术创新研究所&am…

VSCodeNotebook安全进阶:如何安全修改笔记密码并保护隐私日记

VSCodeNotebook安全进阶:如何安全修改笔记密码并保护隐私日记

2026/8/23 15:53:08

VSCodeNotebook安全进阶:如何安全修改笔记密码并保护隐私日记 【免费下载链接】VSCodeNotebook 📝 Use VS Code as a reliable note-taking/journal application 项目地址: https://gitcode.com/gh_mirrors/vs/VSCodeNotebook VSCodeNotebook 是一…

微信聊天记录导出完整指南:用免费开源 WeChatMsg 3 步把记录存下来

微信聊天记录导出完整指南:用免费开源 WeChatMsg 3 步把记录存下来

2026/8/23 15:43:07

微信聊天记录导出完整指南:用免费开源 WeChatMsg 3 步把记录存下来 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trend…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…