アプリの応答が遅い場合や、アニメーションの再生品質が悪い場合、フリーズする場合、多くの電力を消費している場合は、アプリのパフォーマンスが低下していると見なされます。パフォーマンスの問題を解決するには、アプリのプロファイリングを行い、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 でプロファイリング可能なアプリをビルドして実行する手順は次のとおりです。
- 実行/デバッグ構成を作成します(まだ作成していない場合)。
- リリース ビルド バリアントを選択します([Build] > [Select Build Variant])。
- [その他のアクション] > [オーバーヘッドの少ないアプリ「app」をプロファイリング] または [完全なデータでアプリ「app」をプロファイリング] (「app」は実行構成の名前で、異なる場合があります)をクリックします。2 つのオプションのどちらを選択するかについては、要件をご覧ください。テストデバイスでアプリが開き、Android Studio で [プロファイラ] ペインが開きます。
これらの手順が機能しない場合は、プロファイリング可能なアプリを手動でビルドして実行するをご覧ください。
プロファイリングを開始する
プロファイリング タスクを開始する手順は次のとおりです。
[プロファイラ] ペインの [ホーム] タブで、リストからプロセスを選択します。ほとんどの場合、アプリを表すトッププロセスを選択します。
[タスク] セクションからプロファイリング タスクを選択します。タスクの詳細については、このセクションの他のページをご覧ください。すべてのプロファイリング タスクがすべてのプロセスで使用できるわけではありません。どこから始めればよいかわからない場合は、アプリをライブで検査して、パフォーマンス アクティビティの全体像を把握します。
[プロファイラ タスクの開始元] プルダウンを使用して、プロファイラ タスクを起動時に開始するか、実行中にプロセスにアタッチするかを選択します。アプリの起動時間を短縮しようとしている場合や、アプリの起動中に発生するプロセスをキャプチャしようとしている場合は、起動を含める必要があります。それ以外の場合は、アプリの現在の状態でプロファイリングを開始できます。
[プロファイラ タスクを開始] をクリックします。タスクは独自のタブで開始されます。
アプリを操作してアクティビティをトリガーします。
録画を停止し(該当する場合)、解析が完了するまで待ってから結果を確認します。
トレースの比較、エクスポート、インポート
プロファイリング タスクを停止すると、[プロファイラ] ペインの [過去の記録] タブに自動的に保存されます。保存した記録を使用して、さまざまなシナリオでのリソース使用状況を比較できます。録音は現在の Android Studio セッションの期間中保存されます。それより長く保持するには、[録音をエクスポート] をクリックしてエクスポートします。すべてのトレースタイプをエクスポートできるわけではありません。
前回 Android Studio を実行したときのトレースなど、トレースをインポートするには、[過去の録画] タブで [録画をインポート] をクリックし、トレース ファイルを選択します。ファイルを Android Studio エディタ ウィンドウにドラッグしてインポートすることもできます。
録音の設定を編集する
プロファイラ タスクの録画構成を編集するには、プロファイラ設定 をクリックします。切り替えることができる主な設定は次の 2 つです。
- サンプリングを含むタスクの場合、[サンプル間隔] は各サンプル間の時間を表します。指定する間隔が短ければ短いほど、記録データのファイルサイズ制限により早く到達します。
- [File size limit] は、接続されたデバイスに書き込めるデータの量を表します。記録を停止すると、Android Studio はこのデータを解析してプロファイラ ウィンドウに表示します。制限を増やして大量のデータを記録すると、Android Studio ではファイルの解析により長い時間がかかり、応答しなくなる場合があります。