我终于不再为 Android 上的 DNS 设置头疼了
熟悉的场景:你决定搭建个人 DNS 服务器来屏蔽应用和浏览器中的广告。你打开 Android 设置,层层深入连接菜单,找到"私密 DNS"选项,输入主机地址……而每次需要检查某个网站或应用是否因为 DNS 而"挂了"时,都得重复这一套流程。在 Android 上,这个设置藏得如此之深,仿佛 Google 在故意保护广告收入。
最近偶然发现了一款名为 adns 的小巧工具,由开发者 eyalm2000 开发。这是一个开源工具,功能很简单:将系统 DNS 开关直接放到主屏幕或通知栏中。
有什么好处
Android 上大多数广告拦截器的问题在于,它们要么作为本地 VPN 服务运行,要么作为后台服务运行。这不可避免地会"消耗"电池,占用通知栏空间,有时还会与真正的 VPN 客户端产生冲突。
adns 的工作方式不同。它不运行任何后台进程。从本质上讲,它是 Android 9 引入的系统私密 DNS 设置的轻量级图形界面。该应用只是切换一个全局系统变量。
这功能对谁有用:
- NextDNS 用户(对他们来说简直是天堂,有直接的集成)
- 使用 AdGuard DNS、Cloudflare 或自己的 Pi-hole/AdGuard Home 服务器的用户
- 需要快速切换 DNS 来测试网站的开发者
几次点击,干净的网络
这个应用最方便的地方是 NextDNS 集成。如果你有账户,可以直接在应用中登录,选择你需要的配置文件,并随时更改其设置。如果你使用其他服务,只需指定主机名(例如,dns.adguard.com)。
我喜欢的功能:
- 快捷设置磁贴。现在你可以在一秒钟内禁用过滤,无需最小化当前应用。
- 不消耗电池。该应用 99% 的时间都在"睡眠",只有在你按下按钮时才会唤醒。
- Material 3 设计。看起来像是系统原生的部分,而不是来自 Android Gingerbread 时代的权宜之计。
如何运行
由于 Android 像保护眼睛一样保护其设置,任何应用都不能随意更改系统 DNS。要让 adns 工作,你需要授予它权限 WRITE_SECURE_SETTINGS。
有两种方式。对于不想折腾命令行的人来说,最简单的方式是使用 Shizuku。这个应用将 ADB 权限桥接到其他程序。如果 Shizuku 已经配置好了,你只需在 adns 界面中按一个按钮即可。
第二种方式是传统的 ADB。将手机连接到电脑并运行命令:
adb shell pm grant com.eyalm.adns android.permission.WRITE_SECURE_SETTINGS
之后,魔法就开始生效了。
技术层面
这个项目使用 Kotlin 和 Jetpack Compose 编写。代码出奇地简洁紧凑。如果你从事移动开发,我建议你看看这个仓库——这是使用现代方法处理 Android 系统设置的一个很好的例子。这个应用很轻量,不需要不必要的权限(除了 DNS 所需的权限)。
值得一试吗
如果你积极使用自定义 DNS,并且厌倦了在设置菜单中来回导航——那绝对值得一试。这是那种小工具优雅地解决一个特定"痛点"的典型案例。
我发现的唯一缺点是:安装需要一次性配置 ADB 或 Shizuku。但这是 Android 的安全策略,开发者对此无能为力。但一旦设置好——你就永远告别广告了。
你可以在 GitHub 的 Releases 部分或 IzzyOnDroid 目录中获取 APK。
相关项目