Network Inspector を使用してネットワーク トラフィックを検査する

Network Inspector のタイムラインにはネットワーク アクティビティがリアルタイムで表示され、送受信されたデータが示されます。Network Inspector を使用すれば、アプリがデータを転送した方法とタイミングを調べ、基盤となるコードを適切に最適化できます。

Network Inspector を開く手順は次のとおりです。

  1. Android Studio のナビゲーション バーで [View] > [Tool Windows] > [App Inspection] を選択します。App Inspection ウィンドウが自動でアプリプロセスに接続したら、タブの中から [Network Inspector] を選択します。
    • App Inspection ウィンドウが自動でアプリプロセスを接続しない場合は、手動でアプリプロセスを選択する必要があります。
  2. App Inspection ウィンドウで、検査するデバイスとアプリプロセスを選択します。

Network Inspector の概要

[Network Inspector] ウィンドウの上部には、イベントのタイムラインが表示されます。クリックしてドラッグし、タイムラインの一部を選択してトラフィックを調査できます。

[Network Inspector] ウィンドウ
図 1. [Network Inspector] ウィンドウ。

詳細ペインのタイミング グラフを使用して、パフォーマンスの問題が発生している可能性のある場所を特定できます。黄色のセクションの先頭が、送信されるリクエストの最初のバイトに対応します。青色のセクションの先頭が、受信されるレスポンスの最初のバイトに対応します。青色のセクションの末尾は、受信されるレスポンスの最後のバイトに対応します。

選択した一部のタイムラインにおけるネットワーク アクティビティについて詳しく確認する場合は、タイムラインの下にあるペインで、次のいずれかのタブを選択します。

  • Connection View: アプリの CPU スレッド全体での、タイムライン選択部分で送受信されたファイルをリストします。リクエストごとにサイズ、種類、ステータス、送信期間を調べることができます。列の見出しのいずれかをクリックすると、リストを並べ替えることができます。また、タイムラインの選択部分に関する詳細な分析情報が表示され、各ファイルが送受信されたタイミングが表示されます。
  • Thread View: アプリの各 CPU スレッドのネットワーク アクティビティを表示します。図 2 に示すように、このビューでは各ネットワーク リクエストがどのスレッドによるものなのかを調査できます。

    [Thread View] でアプリのスレッドによるネットワーク リクエストを調査する
    図 2. [Thread View] でのアプリのスレッドによるネットワーク リクエストの調査
  • Rules View: ルールを使用すると、さまざまなステータス コード、ヘッダー、本文を含むレスポンスを検出したときのアプリの動作をテストできます。新しいルールを作成するときには、新しいルールに名前を付け、[Origin] サブセクションにインターセプトするレスポンスの生成元に関する情報を含めます。[Response] サブセクションでは、レスポンスを変更する場所と方法を指定できます。たとえば、特定のステータス コードを含むレスポンスに実行するルールを設定し、そのステータス コードを変更できます。[Header rules] サブセクションと [Body rules] サブセクションでは、レスポンス ヘッダーまたは本文を追加または変更するサブルールを作成します。ルールは記載された順序で適用されます。ルールの横にある [Active] チェックボックスをオンにして、有効にするルール、無効にするルールを選択します。

    Network Inspector の [Rules] ペインと [Rule Details] ペイン
    図 3. Network Inspector の [Rules] ペインと [Rule Details] ペイン

[Connection View] または [Thread View] でリクエスト名をクリックすると、送受信されたデータに関する詳細情報を調査できます。タブをクリックすると、レスポンス ヘッダーとボディ、リクエスト ヘッダーとボディ、コールスタックを表示できます。

[Response] タブと [Request] タブで、[View Parsed] をクリックすると書式付きテキストが表示され、[View Source] をクリックすると未加工テキストが表示されます。

未加工テキストと書式付きテキストの切り替え
図 4. 対応するリンクをクリックして、未加工テキストと書式付きテキストを切り替え

HttpsURLConnection のネットワーク リクエストの表示だけではなく、Network Inspector では OkHttp もサポートされます。一部のサードパーティ ネットワーク ライブラリ(Retrofit など)では、OkHttp を内部的に使用するため、Network Inspector でネットワーク アクティビティを検査できます。「 Now In Android サンプルアプリ ネットワーク オペレーションに OkHttp を使用するため、 できます。

HttpsURLConnection API を使用している場合、次のサンプルに示すように setRequestProperty メソッドを使用してコードに含めた [Request] タブにのみヘッダーが表示されます。

val url = URL(MY_URL_EN)
val urlConnection: HttpsURLConnection = url.openConnection() as HttpsURLConnection
...
// Sets acceptable encodings in the request header.
urlConnection.setRequestProperty("Accept-Encoding", "identity")
URL url = new URL(MY_URL_EN);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
//...
// Sets acceptable encodings in the request header.
urlConnection.setRequestProperty("Accept-Encoding", "identity");

ネットワーク接続のトラブルシューティング

Network Inspector がトラフィックの値を検出したもののサポート対象のネットワーク リクエストを特定できない場合は、次のエラー メッセージが表示されます。

**Network Inspector Data Unavailable:** There is no information for the
  network traffic you've selected.

現在のところ、Network Inspector はネットワーク接続用に HttpsURLConnection ライブラリと OkHttp ライブラリのみをサポートしています。アプリが別のネットワーク接続ライブラリを使用している場合、Network Inspector でネットワーク アクティビティを表示できないことがあります。このエラー メッセージを受信したもののアプリで HttpsURLConnection または OkHttp を使用している場合は、バグを報告するか、Issue Tracker を検索してこの問題に関連する既存のレポートにフィードバックを追加してください。また、これらのリソースを使用して追加のライブラリのサポートをリクエストすることもできます。