























核心摘要 (TL;DR)
- 问题现象:模拟器配置了宿主机代理后依然无法访问
google.com;WiFi 一直提示 “No Internet” 或带有感叹号,且在开启 WiFi 代理时连国内的百度、必应等网页也全面超时挂起(ERR_TIMED_OUT)。- 根本原因:
- 代理双重冲突 (Chaining Conflict):同时使用了命令行启动参数
-http-proxy以及模拟器内置 WiFi 的 Manual Proxy 设置,两个代理层级相互嵌套拦截,造成网络死循环。- Captive Portal 锁死路由:Android 系统在连接 WiFi 时会尝试测试 Google 检测服务器以评估网络状况。检测失败后判定为 “No internet”,系统会自动选择切断该 WiFi 的实际出口路由或强制回退到蜂窝数据,导致代理配置直接失效。
- Clash 局域网限制:未开启 Clash 的 “允许局域网 (Allow LAN)” 开关。此时 Clash 仅监听
127.0.0.1,而模拟器发往网关10.0.2.2的入站连接被宿主机直接拒绝。- 系统镜像型号不对:使用了
google_apis镜像,其内部完全缺失 Google Play 商店客户端,导致无法正常连接 Play 商店。- 关键解法:
- 关闭连网检测:通过 ADB 命令
captive_portal_mode 0彻底关闭 Android 系统的网络连通性检查。- 规避代理冲突:不要同时设置命令行代理与内置 WiFi 代理;在宿主机 Clash 中开启 “允许局域网” 后,使用独立 WiFi 手动代理(
10.0.2.2:7890)。- 使用 Play 镜像:确保 AVD 设备使用
google_play系统镜像而非google_apis镜像。
基本信息
- 问题分类:模拟器网络联通 / 代理配置冲突 / 开发服务接入调试
- 环境说明:macOS (M系列) / Android SDK Emulator / Clash Verge / Android 14+
- 触发条件:在未开全局 Tun 模式下,多处重叠配置代理,或由于国内网络环境下模拟器对 Google 检测服务不通引发的自动降级。
- 报错表现:
并且模拟器 WiFi 标志上出现小感叹号,提示 “No internet”。
1
2
3 This site can't be reached
www.google.com took too long to respond.
ERR_TIMED_OUT
在日常开发或接入需要连接 Google 服务的 App 时,我们需要在模拟器上连接 Google 服务以测试各项网络接口或登录商店。
当我们尝试将模拟器的流量导入宿主机(Mac)运行的代理客户端(如 Clash 端口 7890)时,经常会遇到以下现象:
ERR_TIMED_OUT。ERR_TIMED_OUT,网络完全瘫痪。该问题背后有三个互相层叠的隐藏网络机制:
Android 模拟器运行在独占的虚拟机沙箱中,它的网络是一个虚拟的局域网网段。
10.0.2.2 是指向宿主机 Mac 环回接口(Loopback / 127.0.0.1)的特殊网关。127.0.0.1,任何来自虚拟网桥(来自 10.0.2.16 等模拟器 IP 发往 10.0.2.2)的连接都会被 Clash 视作 LAN 入站流量并直接拒绝接收。当 Android 连上 WiFi 后,会向 Google 专属服务器发送一个轻量 HTTP 请求(connectivitycheck.gstatic.com)以确定是否需要弹窗输入网页认证。
-http-proxy 与 WiFi 手动代理的双重冲突有些开发者为了省事,使用如下命令行参数启动模拟器:
1 | emulator -avd Pixel_9_Pro -http-proxy http://127.0.0.1:7890 |
启动后,又去模拟器的系统设置(WiFi Advanced Settings)里手动设置了 10.0.2.2:7890 的 Manual Proxy。
ERR_TIMED_OUT。在 Mac 宿主机上,我们直接使用 Android SDK 附带的 adb 工具对运行中的模拟器下发全局配置,彻底关掉 Google 连网检测,使 WiFi 永久保持在“有网”的健康路由状态。
请在终端中执行以下命令(模拟器需保持运行状态):
1 |
|
执行后,模拟器的 WiFi 图标感叹号会瞬间消失,路由状态恢复正常。
在关闭检测后,建议选择以下其中一种方式干净地配置代理,切勿重叠使用:
-http-proxy 参数。10.0.2.2。7890。1 | ~/Library/Android/sdk/emulator/emulator -avd Pixel_9_Pro -http-proxy socks5://127.0.0.1:7891 & |
在解决网络问题后,若要测试真正的 Google Play 商店或相关谷歌服务,还需要确保您的 Android 模拟器不是 google_apis 镜像。
google_apis 镜像:Found systemPath .../google_apis/arm64-v8a/Android ... (Google Play) 的系统镜像(此时镜像存储路径应为 .../google_play/arm64-v8a/)。很多开发者会担心这些配置是否每次启动模拟器或重启电脑后都需要重新设置。答案是:不需要,这些设置是持久生效的。
captive_portal 禁用命令写入的是 Android 虚拟机的系统全局数据库(保存在 /data 分区内)。模拟器重启或关机并不会丢失这一配置。⚠️ 例外情况:
唯一会导致上述配置失效的操作是,在 Android Studio Device Manager 中对该模拟器执行了 “Wipe Data” (擦除数据/恢复出厂设置)。擦除数据会清空整个/data分区,届时您需要重新下发一次 ADB 连网检测禁用命令并重置 WiFi 手动代理。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。