>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Java

无需Root权限覆盖Android上的hosts文件

每个移动开发者或QA工程师都遇到过需要把应用指向测试环境的情况。在桌面端,只需几秒钟就能通过打开2或3搞定。但在Android上,一切都会撞上系统安全的壁垒。没有root权限,编辑系统4文件是不可能的。

当然,你可以在办公室网络上搭建一个本地DNS服务器,比如5,并在手机Wi-Fi设置中指定其IP。但如果你在咖啡馆、在路上,或者根本不想折腾路由器配置呢?

这正是Virtual-Hosts仓库大显身手的地方。该项目直接在移动设备上解决IP地址重定向问题,无需破解固件或获取超级用户权限。

无需Root的DNS覆盖原理

这个工具的原理非常巧妙。Android不允许修改系统文件,但允许应用通过标准6 API创建本地网络接口。

应用会在你的设备上设置一个虚拟网卡。手机的所有出站流量都会经过这个本地接口。Virtual Hosts内的自定义DNS解析器会拦截对域名的请求。

如果域名在你的文本规则文件中,应用会立即返回指定的IP地址。如果域名不在列表中,请求会发送到你的运营商或Google的标准DNS服务器。所有操作都在手机内存内完成——流量不会经过第三方服务器。

为了实现这个方案,作者以LocalVPN库为基础,用Java编写了一个便捷的封装层。

Virtual Hosts的便捷之处

操作系统中的常规7文件有一个明显的局限:每个条目都需要手动输入。如果你有十几个子域名,列表会迅速膨胀。

Virtual Hosts支持通配符条目。在处理微服务架构或多租户应用时,这能节省大量时间。

你无需写一长串条目:

0

只需写一行:

1

域名名前面的点表示8的所有级别子域名都会自动发送到指定IP地址。

应用的基本功能中,以下几点值得注意:

  • 从设备存储的纯文本文件或通过直链加载规则
  • 一键快速开关覆盖功能
  • 支持标准IP和域名映射语法
  • 极低的电量和内存消耗

启动和实际使用

应用以现成的安装包和源代码形式分发。你可以直接从F-Droid目录或Google Play下载APK:

Get it on F-Droid

工作流程如下:

  1. 在手机上创建一个包含所需重定向规则的文本文件9。
  2. 打开Virtual Hosts,通过系统对话框选择这个文件。
  3. 按下大的电源按钮。
  4. Android会请求确认以创建VPN连接。确认该请求。

之后,设备上的任何浏览器、curl请求或移动应用都会开始通过指定的域名访问你的测试服务器。

实际应用场景

这个项目在各种日常开发场景中都非常有用。

使用本地机器测试API。开发者在笔记本电脑上运行后端(10),但移动应用硬编码使用域名11。与其用不同的URL重新构建APK,不如在Virtual Hosts中添加一条重定向规则即可。

检查布局和前端。你可以快速将真手机指向运行热代码重载的本地DevServer。

隔离测试环境。同时测试多个分支时,可以在几秒钟内通过应用界面切换配置文件。

局限性和注意事项

尽管有很多优点,这种方法也有一些需要提前了解的细节。

主要缺点源于Android的架构。系统中同时只能有一个VPN服务处于活动状态。如果你需要保持企业WireGuard或OpenVPN连接以访问工作资源,就无法同时使用Virtual Hosts。

第二点涉及代码本身。这个项目创建于2017年,Java代码库以现代Android开发标准来看略显过时。不过没有什么会坏:这个工具只做一件明确的事,在最新Android版本上仍然表现出色。

总结

Virtual Hosts是任何移动开发者或QA工程师工具箱中的出色利器。它解决了一个具体、明确的问题,无需用自定义固件、bootloader解锁或获取root来折腾测试设备。如果你需要快速将域名重定向到本地IP并在现场测试应用构建,这个仓库绝对值得收藏。

相关项目