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

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

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

  1. [View] > [Tool Windows] > [Profiler] をクリックします(またはツールバーの [Profile] をクリックします)。
  2. Android Profiler のツールバーで、プロファイリングするデバイスとアプリのプロセスを選択します。USB 経由でデバイスを接続しているにもかかわらずデバイスがリストに表示されない場合は、USB デバッグが有効になっているかを確認します。
  3. [NETWORK] タイムラインの任意の場所をクリックして Network Profiler を開きます。

タイムラインの一部を選択する、送信したネットワーク リクエストと受信したレスポンスの一覧を調べる、または選択したファイルに関する詳細情報を表示するには、詳細なプロファイリングを有効にする必要があります。

アプリのネットワーク アクティビティをプロファイリングする理由

アプリがネットワークにリクエストを送信すると、デバイスは電力を消費するモバイルまたは Wi-Fi 無線通信を使用してパケットを送受信しなければなりません。無線通信を利用すると、データの転送時だけでなく、常時オンにしておくためにも電力を余分に消費します。

Network Profiler を使用すると、ネットワーク アクティビティで頻発している短いスパイクを見つけることができます。こうしたスパイクでは、集中的に発生した多くの短いリクエストを処理するために、アプリが無線通信を頻繁または長時間にわたってオンにすることが要求されます。このパターンからは、ネットワーク リクエストを一括処理することでアプリを最適化し、バッテリーのパフォーマンスを改善できる可能性があることがわかるので、データの送受信のために無線通信をオンにする回数を減らします。また、無線通信を省電力モードに切り替えて一括処理されたリクエスト間の間隔を長くすることで、バッテリーを節約できます。

アプリのネットワーク アクティビティを最適化する方法について詳しくは、ネットワークに起因する電池の消耗を軽減するをご覧ください。

Network Profiler の概要

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

図 1. Network Profiler ウィンドウ

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

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

    図 2. [Thread View] でアプリのスレッドによるネットワーク リクエストを調査する

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

[Response] タブと [Request] タブで、書式付きテキストを表示するには [View Parsed] を、生テキストを表示するには [View Source] をクリックします。

図 3. リンクをクリックして生テキスト(左)と書式付きテキスト(右)を切り替えます。

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

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

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

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

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