Hosts 广告拦截前置条件:为什么 Play Store 版做不了
渠道硬限制
这是最关键的一点:Hosts 广告拦截功能仅在 GitHub Release 和 F-Droid 渠道版本中可用。Google Play Store 版本受 Google 政策限制,被禁止提供广告拦截功能。
原因是 Google Play 的应用政策明确禁止"使用 Hosts 文件或其他手段全局拦截广告域名"的应用上架。NetGuard 的 Play 版本签名与 GitHub 版本相同(方便 Play 用户无缝切换),但开发者在 Play 版本的编译构建中移除了 Hosts 相关功能。
如果需要 Hosts 拦截,必须从 GitHub Release 或 F-Droid 安装 NetGuard。
为什么必须走 GitHub / F-Droid
开发者在 ADBLOCKING 文档开头明确声明:
由于 Google 不允许广告拦截应用上架 Google Play Store,Play Store 版本无法使用 Hosts 广告拦截。
有两个解决办法:
办法一(推荐):直接用 GitHub 版
- Play 版和 GitHub 版签名相同,可以直接覆盖安装
- Play Store 购买的 Pro 功能会自动恢复(云端同步)
- 覆盖后 Hosts 拦截、端口转发等 GitHub 版独有功能立即可用
办法二:用 F-Droid 版
- F-Droid 版使用独立签名,不能直接覆盖 Play / GitHub 版
- 必须先卸载旧版再安装 F-Droid 版
- Pro 功能需要通过捐赠重新激活
系统要求
- Android 5.1 或更高版本(与 NetGuard 整体要求一致)
- 设备上有可写入的存储位置(用来保存 Hosts 文件)
- 已启用 NetGuard 防火墙
四个关键前置开关
在 Hosts 拦截生效前,必须在 NetGuard 设置里正确配置以下四个开关。
开关一:Filter traffic(流量过滤)
主菜单 → 设置 → 高级选项 → Filter traffic → ✅ 勾选开启。
这是 Hosts 拦截的基础开关。如果流量过滤没开,即使 Hosts 文件导入成功也不会生效——NetGuard 不会实际检查每个出站请求的目标域名。
Android 5.0 及更早版本上流量过滤是强制开启的;5.1+ 上默认关闭,需要手动开启。
开关二:Block domain names(拦截域名)
主菜单 → 设置 → 高级选项 → Block domain names → ✅ 勾选开启(默认已开启)。
这个开关控制 NetGuard 是否在 DNS 层面拦截已知的广告域名。
开关三:Manage system apps(管理系统应用)
主菜单 → 设置 → 高级选项 → Manage system apps → ✅ 勾选开启。
很多系统应用(包括 Google Play 服务)会显示广告,要对它们也应用 Hosts 拦截就需要开启系统应用管理。默认关闭,需要手动打开。
开关四:关闭浏览器的压缩 / 代理 / DoH
很多浏览器(以及部分应用)内置了数据压缩 / 代理 / DNS over HTTPS 功能,会导致 NetGuard 无法正确识别和拦截域名请求。详细说明见 Hosts 拦截故障排查页面。
前置条件自检清单
开始 Hosts 拦截设置前,对照检查:
| 检查项 | 预期状态 | 验证方法 |
|---|---|---|
| 版本来源 | GitHub Release 或 F-Droid | 卸载重装不会提示签名冲突;或在设置里查看版本信息 |
| Filter traffic | ✅ 开启 | 设置 → 高级选项 |
| Block domain names | ✅ 开启 | 设置 → 高级选项(默认就是开的) |
| Manage system apps | ✅ 开启 | 设置 → 高级选项 |
| 浏览器压缩 / DoT / DoH | 关闭 | Chrome / Firefox 等浏览器设置里检查 |