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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

アプリの応答が遅い場合や、アニメーションの再生品質が悪い場合、フリーズする場合、多くの電力を消費している場合は、アプリのパフォーマンスが低下していると見なされます。パフォーマンスの問題を解決するには、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 は基本的に、マニフェスト ファイルに <profileable android:shell="true"/> という行を追加したリリース APK です。

プロファイル可能なアプリをビルドするには、まずリリースアプリをビルドし、そのマニフェスト ファイルを更新して、リリースアプリをプロファイル可能なアプリに変更します。

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

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

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

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

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

  1. 前述のリリースアプリをプロファイル可能なアプリに変換するには、AndroidManifest.xml ファイルを開いて次の行を追加します。詳細については、リリース用アプリをビルドするをご覧ください。

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

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

注: アプリのプロファイリング中は、Instant Run 機能を無効にしてください。Instant Run を使用すると、パフォーマンスにわずかに影響が生じ、メソッドを更新する際に多少の影響が生じます。その結果、パフォーマンス プロファイリング ツールで取得する情報が影響を受ける場合があります。また、機能の使用中に生成されるスタブメソッドにより、スタック トレースが複雑になることもあります。