使用 Android 模拟器设置代理

在 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 系统代理

配置

您可以通过以下两种方式配置 Android 系统代理:

  1. 手动配置:在模拟器中,依次前往设置 > 网络和互联网 > WLAN,选择您的网络,然后手动输入代理设置。
  2. 自动配置:您可以以编程方式配置 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 之外)使用时,您可以使用以下任一方法配置模拟器代理:

  1. 命令行标志:通过命令行启动模拟器,并使用 -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>
    
  2. 环境变量:使用代理设置定义 http_proxy 环境变量。模拟器会在启动时检查此变量,如果已定义,则会自动使用其值。

  3. Extended Controls:打开模拟器的 Extended controls,依次前往 Settings > Proxy,然后手动输入 HTTP 代理配置。 模拟器会保存这些设备设置,并在重新启动时恢复它们。

    设置模拟器代理

模拟器代理在网络层运行。它通过 TCP 隧道传输 HTTPS 流量,但此流量在转发时未经过解密,从而阻止了 HTTPS 检查。模拟器代理不支持 UDP 重定向。

与 Android Studio 的互动

Android Studio 有自己的代理配置对话框,用于下载更新和库。当您从 Android Studio 启动模拟器时,它会读取 IDE 的代理设置一次,以填充模拟器代理配置。不过,这些设置不会影响 Android 系统代理