发布时间:2026/8/23 14:43:06
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),仅供参考

相关新闻

2026/8/23 17:23:15

华为WLAN实战配置:从零搭建安全无线网络与排错指南

1. 项目概述:从零开始构建一张可用的无线网络刚接触华为WLAN设备时,很多人会被命令行里一堆陌生的术语和参数搞得晕头转向。VAP、SSID、安全模板、射频模板……这些词听起来就让人头大。我刚开始做网络运维那会儿,也是对着设备手册和实验环境…

2026/8/23 17:23:15

构建可验证与自进化的AI智能体:EVE-Agent架构设计与实践

1. 项目概述:当AI学会“自我进化”与“证据溯源”最近在AI智能体(Agent)的圈子里,一个名为“EVE-Agent”的概念开始被频繁提及。它不像我们常见的那些执行固定流程的自动化脚本,也不仅仅是基于大语言模型(L…

2026/8/23 17:23:15

文件压缩技术解析:从信息论原理到实践应用

1. 先搞清楚“无限压缩”到底在问什么看到“无限压缩”这个标题,很多人第一反应是:是不是有个软件能把1GB的文件压成1KB,再压成1字节,最后压没了?这听起来像魔法,但现实中的文件压缩,无论是ZIP、…

2026/8/23 0:02:04

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

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

2026/8/23 0:02:04

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

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

2026/8/23 0:02:04

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

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

2026/8/23 0:02:04

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

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

2026/8/23 0:02:04

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

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

2026/8/23 0:02:04

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

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

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

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

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

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

2026/8/23 4:22:01

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

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