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

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

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

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

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

これらのツールの詳細については、Android Studio のプロファイラのページをご覧ください。

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 ×
イベント モニター ×

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 の機能は制限されています。

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