アプリ パフォーマンスのプロファイリング

アプリの応答が遅い場合や、アニメーションの再生品質が悪い場合、フリーズする場合、多くの電力を消費している場合は、アプリのパフォーマンスが低下していると見なされます。パフォーマンスの問題を解決するには、アプリのプロファイリングを行います。また、CPU、メモリ、グラフィック、デバイスのバッテリーなどのリソースをアプリが効率的に使用できない領域を特定する必要があります。このトピックでは、一般的なパフォーマンスの問題を解決するために使用する Android Studio のツールと手法について説明します。

Android Studio IDE 全体を実行せずにスタンドアロン プロファイラを実行する方法(Windows または Linux のみ)については、スタンドアロン プロファイラを実行するをご覧ください。

要件

アプリのプロファイリングを行うには、次のものが必要です。

  • profileable マニフェスト構成が有効になっているリリースビルド バリアントを持つアプリ(プロファイル可能なアプリとも呼ばれます)。デフォルトでは、この構成は true に設定されています。この構成を確認または変更するには、アプリのマニフェストまたは AndroidManifest.xml ファイルを開き、<application> セクションで profileable マニフェスト構成を探します。

    <profileable android:shell="true" />
    
  • API レベル 29 以降を搭載し、Google Play がインストールされている仮想テストデバイス、または物理テストデバイス。

  • Android Gradle プラグイン 7.3 以降。

プロファイル可能なアプリとデバッグ可能なアプリ

プロファイル可能なアプリでは、一般的なプロファイリング タスクを実行できますが、Java/Kotlin の割り当ての記録やヒープダンプの取得が必要な場合は、デバッグ可能なアプリを使用する必要があります。デバッグ可能なアプリプロセスと API レベル 26 以降を搭載したデバイスでは、ユーザー インタラクション イベントとアプリ ライフサイクル イベントを示すインタラクション タイムラインを、タイムラインを提供するタスクビューで確認することもできます。

デバッグ可能なアプリは、アプリの debug ビルド バリアントをベースとしており、デバッガなどの開発ツールを使用できますが、パフォーマンス コストが若干発生します。プロファイリング可能なアプリは、アプリの release ビルド バリアントをベースとしており、デバッグビルドのパフォーマンス オーバーヘッドなしで、一般的なプロファイリング タスクのサブセットを有効にします。

プロファイル可能なアプリをビルドして実行する

Android Studio でプロファイリング可能なアプリをビルドして実行する手順は次のとおりです。

  1. 実行/デバッグ構成を作成します(まだ作成していない場合)。
  2. リリース ビルド バリアントを選択します([Build] > [Select Build Variant])。
  3. [More actions] > [Profile 'app' with low] または [Profile 'app' with full data] (「app」は実行構成の名前であるため、これとは異なる場合があります)。2 つのオプションのどちらを選択するかについては、要件をご覧ください。テストデバイスでアプリが開き、Android Studio で [プロファイラ] ペインが開きます。

これらの手順で問題が解決しない場合は、プロファイリング可能なアプリを手動でビルドして実行するをご覧ください。

プロファイリングを開始する

プロファイリング タスクを開始する手順は次のとおりです。

  1. [プロファイラ] ペインの [ホーム] タブで、リストからプロセスを選択します。ほとんどの場合、アプリを表すトッププロセスを選択します。

    プロファイラの [ホーム] タブ
  2. [タスク] セクションからプロファイリング タスクを選択します。タスクの詳細については、このセクションの他のページをご覧ください。すべてのプロファイリング タスクがすべてのプロセスで使用可能になるわけではありません。どこから始めればよいかわからない場合は、アプリをライブで検査して、パフォーマンス アクティビティの全体像を把握します。

  3. [プロファイラ タスクの開始元] プルダウンを使用して、プロファイラ タスクを起動時に開始するか、実行中にプロセスにアタッチするかを選択します。アプリの起動時間を短縮する場合や、アプリの起動中に発生するプロセスをキャプチャする場合は、起動を含める必要があります。それ以外の場合は、アプリの現在の状態でプロファイリングを開始できます。

  4. [プロファイラ タスクを開始] をクリックします。タスクは独自のタブで開始されます。

  5. アプリを操作してアクティビティをトリガーします。

  6. 録画を停止し(該当する場合)、解析が完了するのを待ってから結果を確認します。

トレースの比較、エクスポート、インポート

プロファイリング タスクを停止すると、[プロファイラ] ペインの [過去の記録] タブに自動的に保存されます。保存したこれらの記録を使用して、さまざまなシナリオでのリソース使用状況を比較できます。録音は現在の Android Studio セッションの期間中保存されます。それより長く保持するには、[録音をエクスポート] をクリックしてエクスポートします。エクスポートできないトレース タイプもあります。

前回 Android Studio を実行したときのトレースなど、トレースをインポートするには、[過去の録画] タブで [録画をインポート] をクリックし、トレース ファイルを選択します。ファイルを Android Studio エディタ ウィンドウにドラッグしてインポートすることもできます。

録音の設定を編集する

プロファイラ タスクの録画構成を編集するには、プロファイラ設定 をクリックします。切り替えることができる主な設定は次の 2 つです。

  • サンプリングを含むタスクの場合、[サンプル間隔] は各サンプル間の時間を表します。指定する間隔が短ければ短いほど、記録データのファイルサイズ制限により早く到達します。
  • [ファイルサイズの上限] は、接続済みデバイスに書き込めるデータの量を表します。記録を停止すると、Android Studio はこのデータを解析してプロファイラ ウィンドウに表示します。制限を増やして大量のデータを記録すると、Android Studio ではファイルの解析により長い時間がかかり、応答しなくなる場合があります。