在 Android 模拟器上,您可以使用代理来调试应用流量,或从公司防火墙后访问互联网。模拟器提供两种不同的代理机制来支持这些不同的使用情形:Android 系统代理和模拟器代理。
选择合适的代理
在配置代理之前,请务必先了解这两种使用情形。Android 系统代理用于检查应用流量,而模拟器代理用于绕过网络限制。这两个代理是互斥的;您一次只能启用一个。
| 功能 | Android 系统代理 | 模拟器代理 |
|---|---|---|
| 主要使用场景 | 应用调试 | 防火墙绕过 |
| 运营层 | 网络层 | 应用层 |
| 配置 | Android 系统 Wi-Fi 设置界面 | 模拟器扩展控件界面或 -http-proxy 标志。 |
| HTTPS 调试 | 是 - 允许 Charles Proxy 等工具在安装证书时拦截流量。 |
否 - 创建 TCP 隧道,防止 SSL 检查。 |
| 处理非 HTTP/HTTPS 流量 |
否 - 主要仅处理 HTTP 和 HTTPS 流量。 |
是 - 转发所有 TCP 流量。 |
使用情形 1:使用 Android 系统代理进行应用调试
如需调试应用的流量,例如使用 Charles Proxy 等工具检查 HTTPS 请求,您应使用 Android 系统代理。
此代理在 Android OS 内的应用层运行。它允许调试工具拦截和检查流量,但这需要在模拟设备上安装必要的安全证书。

配置
您可以通过以下两种方式配置 Android 系统代理:
- 手动配置:在模拟器中,依次前往设置 > 网络和互联网 > WLAN,选择您的网络,然后手动输入代理设置。
- 自动配置:您可以以编程方式配置 Android 系统代理。为此,您可以创建一个使用界面自动化框架(例如 UI Automator)的插桩测试,以打开 Android“设置”应用并应用代理配置,而无需手动干预。
使用情形 2:通过模拟器代理绕过公司防火墙
在许多企业网络上,网络管理员都会拒绝直接连接到互联网,而必须通过特定代理进行连接。如需从这种受限网络内访问外部资源,您应使用 Emulator Proxy。
此机制在较低的网络级别运行,并通过指定的代理路由所有模拟设备的 TCP 流量,因此非常适合防火墙穿越。它会在将 HTTP 请求从虚拟设备发送到代理之前以透明方式重写这些请求,从而使这些请求能够正常工作。
配置
在 Android Studio 中使用模拟器时,您可以使用 Android Studio 菜单 (
Settings > Appearance & Behavior > System Settings > HTTP Proxy) 中的设置来配置代理。如需了解详情,请参阅 Android Studio 文档中的设置 Android Studio 代理。
当模拟器作为独立应用(在 Android Studio 之外)使用时,您可以使用以下任一方法配置模拟器代理:
命令行标志:通过命令行启动模拟器,并使用
-http-proxy <proxy>标志。<proxy>信息可以采用http://<machineName>:<port>或http://<username>:<password>@<machineName>:<port>格式指定。emulator -http-proxy http://<machineName>:<port>或
emulator @MyAvd -http-proxy http://<username>:<password>@<machineName>:<port>环境变量:使用代理设置定义
http_proxy环境变量。模拟器会在启动时检查此变量,如果已定义,则会自动使用其值。Extended Controls:打开模拟器的 Extended controls,依次前往 Settings > Proxy,然后手动输入 HTTP 代理配置。 模拟器会保存这些设备设置,并在重新启动时恢复它们。

模拟器代理在网络层运行。它通过 TCP 隧道传输 HTTPS 流量,但此流量在转发时未经过解密,从而阻止了 HTTPS 检查。模拟器代理不支持 UDP 重定向。
与 Android Studio 的互动
Android Studio 有自己的代理配置对话框,用于下载更新和库。当您从 Android Studio 启动模拟器时,它会读取 IDE 的代理设置一次,以填充模拟器代理配置。不过,这些设置不会影响 Android 系统代理。