Android Emulator でプロキシを設定する

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 システム プロキシを設定する

構成

Android システム プロキシは、次の 2 つの方法で構成できます。

  1. 手動設定: エミュレータで、[設定] > [ネットワークとインターネット] > [Wi-Fi] に移動し、ネットワークを選択して、プロキシ設定を手動で入力します。
  2. 自動構成: 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 の外部)として使用する場合は、次のいずれかの方法でエミュレータ プロキシを構成できます。

  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. 拡張コントロール: エミュレータの拡張コントロールを開き、[設定] > [プロキシ] に移動して、HTTP プロキシ設定を手動で入力します。エミュレータは、デバイスのこれらの設定を保存し、再起動時に復元します。

    Emulator Proxy を設定する

エミュレータ プロキシはネットワーク レイヤで動作します。HTTPS トラフィックは TCP 経由でトンネリングされますが、このトラフィックは復号化されずに転送されるため、HTTPS インスペクションは実行されません。エミュレータ プロキシは UDP リダイレクトをサポートしていません。

Android Studio とのやり取り

Android Studio には、アップデートやライブラリをダウンロードするための独自のプロキシ設定ダイアログがあります。Android Studio からエミュレータを起動すると、IDE のプロキシ設定が 1 回読み取られ、[エミュレータ プロキシ] 構成が設定されます。ただし、これらの設定は Android システム プロキシには影響しません。