在 Android 模擬器上,您可以使用 Proxy 偵錯應用程式流量,或從公司防火牆後方存取網際網路。模擬器提供兩種不同的 Proxy 機制,可支援這些不同的用途:Android 系統 Proxy 和模擬器 Proxy。
選擇合適的 Proxy
設定 Proxy 前,請務必先瞭解這兩種用途。「Android 系統 Proxy」用於檢查應用程式流量,而「模擬器 Proxy」則用於規避網路限制。這兩個 Proxy 互斥,一次只能啟用一個。
| 功能 | Android 系統 Proxy | 模擬器 Proxy |
|---|---|---|
| 主要用途 | 應用程式偵錯 | 防火牆繞過 |
| 作業層 | 網路層 | 應用程式層 |
| 設定 | Android 系統 Wi-Fi 設定使用者介面 | 模擬器擴充控制項使用者介面或 -http-proxy 標記。 |
| HTTPS 偵錯 | 是 - 允許 Charles Proxy 等工具在安裝憑證時攔截流量。 |
否 - 建立 TCP 通道,防止 SSL 檢查。 |
| 處理非 HTTP/HTTPS 流量 |
否 - 主要只處理 HTTP 和 HTTPS 流量。 |
是:轉送所有 TCP 流量。 |
應用實例 1:使用 Android 系統 Proxy 進行應用程式偵錯
如要偵錯應用程式的網路流量 (例如使用 Charles Proxy 等工具檢查 HTTPS 要求),請使用 Android 系統 Proxy。
這個 Proxy 會在 Android OS 的應用程式層運作。這項功能可讓偵錯工具攔截及檢查流量,但您必須在模擬裝置上安裝必要的安全憑證。

設定
您可以透過下列兩種方式設定 Android 系統 Proxy:
- 手動設定:在模擬器中,依序前往「設定」>「網路與網際網路」>「Wi-Fi」,選取您的網路,然後手動輸入 Proxy 設定。
- 自動設定:您可以透過程式輔助方式設定 Android 系統 Proxy。方法是建立使用 UI 自動化架構 (例如 UI Automator) 的插樁測試,開啟 Android 設定應用程式並套用 Proxy 設定,不必手動介入。
使用案例 2:透過模擬器 Proxy 繞過公司防火牆
在許多公司網路中,網路管理員會拒絕與網際網路直接連線,因此必須透過特定 Proxy 進行。如要從這類受限網路存取外部資源,請使用 Emulator Proxy。
這項機制會在較低的網路層級運作,並透過指定的 Proxy 轉送所有模擬裝置的 TCP 流量,因此非常適合用於防火牆遍歷。模擬器會公開重寫來自虛擬裝置的 HTTP 要求,然後再傳送至 Proxy,才能順利執行。
設定
在 Android Studio 內使用模擬器時,可以透過 Android Studio 選單 (Settings > Appearance & Behavior > System Settings > HTTP Proxy) 中的設定檔設定 Proxy。詳情請參閱 Android Studio 說明文件中的「設定 Android Studio Proxy」。
如果將模擬器做為獨立工具使用 (在 Android Studio 外部),可以透過下列任一方法設定模擬器 Proxy:
指令列標記:透過指令列啟動模擬器,並加上
-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>環境變數:使用 Proxy 設定定義
http_proxy環境變數。模擬器會在啟動時檢查這個變數,並自動使用該值 (如已定義)。擴充控制項:開啟模擬器的「擴充控制項」,依序前往「設定」>「Proxy」,然後手動輸入 HTTP Proxy 設定。模擬器會儲存裝置的這些設定,並在重新啟動時還原。

模擬器 Proxy 在網路層運作,這項功能會透過 TCP 建立 HTTPS 流量通道,但流量轉送時不會解密,因此無法檢查 HTTPS 流量。模擬器 Proxy 不支援 UDP 重新導向。
與 Android Studio 互動
Android Studio 有專屬的 Proxy 設定對話方塊,可供下載更新和程式庫。從 Android Studio 啟動模擬器時,系統會讀取 IDE 的 Proxy 設定一次,以填入「模擬器 Proxy」設定。不過,這些設定不會影響 Android 系統 Proxy。