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

アプリの応答が遅い場合や、アニメーションの再生品質が悪い場合、フリーズする場合、多くの電力を消費している場合は、アプリのパフォーマンスが低下していると見なされます。パフォーマンスの問題を解決するには、CPU、メモリ、グラフィック、ネットワーク、デバイスのバッテリーなどのリソースをアプリが効率的に使用できていない場所を特定する必要があります。

これらの問題を見つけて修正するには、このトピックで説明するプロファイリングとベンチマークのためのツールや手法を使用します。パフォーマンスを測定する手法と、これらの手法を使用して特定の問題を解決する方法については、パフォーマンスの測定をご覧ください。

Android Studio には、潜在的な問題を見つけて可視化できる複数のプロファイリング ツールが用意されています。

  • CPU Profiler: ランタイム パフォーマンスの問題を追跡できます。
  • Memory Profiler: メモリ割り当てを追跡できます。
  • Energy Profiler: バッテリーの消耗につながるエネルギー使用量を追跡します。

これらのツールは、Android 5.0(API レベル 21)以降に対応しています。ツールについて詳しくは、ユーザーガイドでこのセクションのその他のページをご覧ください。

Jetpack Benchmark ライブラリを使用すると、アプリにおける重要な各種オペレーションを測定できます。

  • Macrobenchmark: 重要なパフォーマンスのユースケース(UI アニメーションやスクロールなどのアクションによってトリガーされるアプリの起動や再描画)を測定します。
  • Microbenchmar: 特定の関数の CPU コストを測定します。

これらのライブラリの詳細については、アプリのベンチマークを行うをご覧ください。

プロファイル可能なアプリ

Profileable は Android Q で導入されたマニフェスト構成です。デバイスのユーザーが Android Studio、Simpleperf、Perfetto などのツールでアプリをプロファイリングできるかどうかを指定できます。

profileable が導入されるまでは、ほとんどのデベロッパーが Android でデバッグ可能なアプリしかプロファイリングできなかったため、副作用としてパフォーマンス コストが大幅に増大していました。こうしたパフォーマンス コストは、特にタイミングに関連する場合、プロファイリングの結果を無効にする可能性がありました。表 1 に、デバッグ可能なアプリとプロファイル可能なアプリの違いをまとめます。

表 1. デバッグ可能なアプリとプロファイル可能なアプリの主な違いのまとめ。
機能 デバッグ可能 プロファイル可能
Memory Profiler フル

○:

×:

CPU Profiler フル

○:

×:

Network Profiler ×
Energy Profiler ×
Power Profiler
イベント モニター ×

Profileable が導入され、デベロッパーはパフォーマンス コストを最小限に抑えつつ、アプリからプロファイリング ツールに情報を公開できるようになりました。プロファイル可能な APK は、基本的にマニフェスト ファイルの <application> セクション内に <profileable android:shell="true"/> という行を追加したリリース APK です。

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

プロファイル可能なアプリをワンクリックで構成、ビルド、実行できます。この機能を使用するには、API レベル 29 以降を搭載し、Google Play がインストールされている仮想テストデバイス、または物理テストデバイスが必要です。この機能を使用するには、Profile app アイコン の横にある矢印をクリックして、次のどちらかを選択します。

ワンクリックでプロファイル可能なビルドメニュー
  • オーバーヘッドの少ないプロファイル「アプリ」が、CPU Profiler と Memory Profiler を起動します。Memory Profiler では、Record Native Allocations のみが有効になっています。

    オーバーヘッドの少ないプロファイリング
  • 完全なデータを持つプロファイル「アプリ」が、CPU Profiler、Memory Profiler、Energy Profiler を起動します。

    完全なデータのプロファイリング

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

プロファイル可能なアプリを手動でビルドするには、まずリリースアプリをビルドし、そのマニフェスト ファイルを更新して、リリースアプリをプロファイル可能なアプリに変更します。プロファイル可能なアプリを構成したら、プロファイラを起動し、プロファイル可能なプロセスを選択して分析します。

リリースアプリをビルドする

プロファイリング用のリリースアプリをビルドする手順は次のとおりです。

  1. アプリの build.gradle ファイルに次の行を追加して、デバッグキーでアプリに署名します。すでに稼働中のリリースビルド バリアントがある場合は、スキップして次のステップに進みます。

            buildTypes {
              release {
                signingConfig signingConfigs.debug
              }
            }
          
  2. Android Studio で、[Build] > [Select Build Variant...] を選択して、リリース バリアントを選択します。

リリースをプロファイル可能に変更する

  1. 上記のリリースアプリをプロファイル可能なアプリに変換するには、 AndroidManifest.xml ファイルを作成し、その中に以下を追加します。 <application>。詳細については、リリース用アプリをビルドするをご覧ください。

    <profileable android:shell="true"/>

  2. SDK のバージョンによっては、アプリの build.gradle ファイルに次の行を追加する必要があります。

          aaptOptions {
            additionalParameters =["--warn-manifest-validation"]
          }
        

プロファイル可能なアプリのプロファイリング

プロファイル可能なアプリをプロファイリングする手順は次のとおりです。

  1. 開発用のエミュレータまたはデバイスからアプリを起動します。

  2. Android Studio で、[View] > [Tool Windows] > [Profiler] を選択してプロファイラを起動します。

  3. アプリが起動したら、プロファイラの プロファイラのプラスボタン ボタンをクリックしてプルダウン メニューを表示します。デバイスを選択し、[Other profileable processes] からアプリのエントリを選択します。

    プロファイル可能なメニュー
  4. プロファイラがアプリにアタッチされているはずです。CPU Profiler と Memory Profiler のみ利用可能です。Memory Profiler の機能は制限されています。

    プロファイル可能なセッション ビュー
    プロファイル可能なメニュー
    プロファイル可能なメニュー

セッション

Profiler のデータは「セッション」として保存できます。セッションは Android Studio を終了するまで保持されます。プロファイリング情報を複数のセッションで記録してセッションを切り替えることにより、さまざまな状況でリソースの使用状況を比較できます。

  • 新しいセッションを開始するには、[Start a new profiling session] ボタン をクリックして、表示されるプルダウン メニューからアプリプロセスを選択します。
  • トレースを記録した場合やヒープダンプをキャプチャした場合、Android Studio はそのデータを(アプリのネットワーク アクティビティとともに)個別のエントリとして現在のセッションに追加します。
  • 現在のセッションへのデータの追加を停止するには、[Stop the current profiling session] をクリックします。
  • 前回 Android Studio を使用したときにエクスポートしたトレースをインポートするには、[Start new profiler session] をクリックして [Load from file] を選択します。

古いデバイス(API レベル 26 より前)の追加のサポートを有効にする

Android 7.1 以前を搭載したデバイスで追加のプロファイリング データを表示するには、Android Studio でコンパイル済みアプリにモニタリング ロジックを挿入する必要があります。このような追加のプロファイリング データには、以下が含まれます。

  • すべてのプロファイラ ウィンドウのイベント タイムライン
  • Memory Profiler に割り当てられているオブジェクトの数
  • Memory Profiler のガベージ コレクション イベント
  • Network Profiler のすべての送信ファイルに関する詳細

古いデバイスの追加のサポートを有効にする手順は次のとおりです。

  1. [Run] > [Edit Configurations] の順に選択します。
  2. 左側のペインでアプリ モジュールを選択します。
  3. [Profiling] タブをクリックし、[Enable additional support for older devices (API level < 26)] をオンにします。
  4. 再度アプリをビルドして実行します。

古いデバイスの追加のサポートを有効にすると、ビルドプロセスが遅くなるため、アプリのプロファイリングを開始する場合にのみ有効にしてください。

スタンドアロン プロファイラを実行する

スタンドアロンの Android Studio プロファイラを使用すると、完全な Android Studio IDE を実行しなくてもアプリをプロファイリングできます。

スタンドアロン プロファイラを実行する手順は次のとおりです。

  1. プロファイラが現在 Android Studio 内で実行されていないことを確認します。
  2. インストール ディレクトリにアクセスし、bin ディレクトリに移動します。

    Windows / Linux: studio-installation-folder/bin

    macOS: スタンドアロン プロファイラの使用は、macOS ではサポートされていません。

  3. OS に応じて、profiler.exe または profiler.sh を実行します。Android Studio のスプラッシュ画面が表示されます。スプラッシュ画面が消えると、プロファイラ ウィンドウが開きます。