Android エミュレータでは、プロキシを使用してアプリのトラフィックをデバッグしたり、企業のファイアウォールの背後からインターネットにアクセスしたりできます。エミュレータには、これらのさまざまなユースケースをサポートするために、Android システム プロキシとエミュレータ プロキシという 2 つの異なるプロキシ メカニズムが用意されています。
適切なプロキシの選択
プロキシを構成する前に、2 つのユースケースを理解しておくことが重要です。Android システム プロキシはアプリのトラフィックを検査するためのもので、エミュレータ プロキシはネットワーク制限を回避するためのものです。この 2 つのプロキシは相互に排他的です。一度に有効にできるのは 1 つのみです。
| 機能 | Android システム プロキシ | エミュレータ プロキシ |
|---|---|---|
| 主なユースケース | アプリのデバッグ | ファイアウォール バイパス |
| オペレーティング レイヤ | ネットワーク レイヤ | アプリケーション レイヤ |
| Configuration | Android システムの Wi-Fi 設定 UI | エミュレータ拡張コントロール UI または -http-proxy フラグ。 |
| HTTPS デバッグ | はい - 証明書がインストールされているときに、Charles Proxy などのツールがトラフィックをインターセプトすることを許可します。 |
No - TCP トンネルを作成し、 SSL インスペクションを防止します。 |
| HTTP/HTTPS 以外の トラフィックを処理 |
No - 主に HTTP と HTTPS トラフィックのみを処理します。 |
はい - すべての TCP トラフィックを転送します。 |
ユースケース 1: Android システム プロキシを使用したアプリのデバッグ
Charles Proxy などのツールで HTTPS リクエストを調べるなど、アプリケーションのネットワーク トラフィックをデバッグするには、Android システム プロキシを使用する必要があります。
このプロキシは、Android OS 内のアプリケーション レイヤで動作します。デバッグツールでトラフィックをインターセプトして検査できますが、エミュレートされたデバイスに必要なセキュリティ証明書をインストールする必要があります。

構成
Android システム プロキシは、次の 2 つの方法で構成できます。
- 手動設定: エミュレータで、[設定] > [ネットワークとインターネット] > [Wi-Fi] に移動し、ネットワークを選択して、プロキシ設定を手動で入力します。
- 自動構成: Android システム プロキシをプログラムで構成できます。これは、UI Automator などの UI 自動化フレームワークを使用して Android 設定アプリを開き、手動操作なしでプロキシ構成を適用するインストルメンテーション テストを作成することで行われます。
ユースケース 2: エミュレータ プロキシを使用して企業ファイアウォールをバイパスする
多くの企業ネットワークでは、インターネットへの直接接続はネットワーク管理者によって拒否され、代わりに特定のプロキシを経由する必要があります。このような制限付きネットワーク内から外部リソースにアクセスするには、エミュレータ プロキシを使用する必要があります。
このメカニズムは下位のネットワーク レベルで動作し、エミュレートされたデバイスのすべての 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環境変数を定義します。エミュレータは起動時にこの変数をチェックし、定義されている場合は自動的にその値を使用します。拡張コントロール: エミュレータの拡張コントロールを開き、[設定] > [プロキシ] に移動して、HTTP プロキシ設定を手動で入力します。エミュレータは、デバイスのこれらの設定を保存し、再起動時に復元します。

エミュレータ プロキシはネットワーク レイヤで動作します。HTTPS トラフィックは TCP 経由でトンネリングされますが、このトラフィックは復号化されずに転送されるため、HTTPS インスペクションは実行されません。エミュレータ プロキシは UDP リダイレクトをサポートしていません。
Android Studio とのやり取り
Android Studio には、アップデートやライブラリをダウンロードするための独自のプロキシ設定ダイアログがあります。Android Studio からエミュレータを起動すると、IDE のプロキシ設定が 1 回読み取られ、[エミュレータ プロキシ] 構成が設定されます。ただし、これらの設定は Android システム プロキシには影響しません。