Wear OS での Jetpack Compose のパフォーマンス

多くの Wear OS デバイスは大型のモバイル デバイスに比べて CPU と GPU のリソースが限られるため、Wear OS でのパフォーマンスは、アプリに関する検討を行ううえで不可欠な要素です。Material 3 Expressive でよりリッチなアニメーションと動的効果が導入されたため、アプリの主要なワークフローのパフォーマンスを検証して改善する必要があります。

Jetpack Compose のパフォーマンス ガイドを使用して、Jetpack Compose を使用して最適なパフォーマンスを実現するようにアプリを構成、開発します。このドキュメントでは、そのガイドで説明されている手法の一部を紹介します。

パフォーマンス測定戦略を作成して実行し、これらの手法がアプリで期待どおりに機能することを確認します。

パフォーマンスを向上させるための重要な手法

最も効果的なパフォーマンス ツールタイプであるベースライン プロファイル(起動プロファイルを含む)と R8 コード オプティマイザーから始めます。

Compose 依存関係をバージョン 1.8 以降に更新します。このバージョンでは、いくつかの重要な新機能が導入され、ライブラリの全体的な安定性が向上しています。更新方法については、依存関係の宣言の手順をご覧ください。詳細については、1.8 リリースのブログCompose の新機能に関する I/O の講演をご覧ください。

ベースライン プロファイル

アプリのパフォーマンスを改善するには、ベースライン プロファイルを使用します。アプリの主要なワークフローを表すクラスとメソッドをグループ化します。システムは、ベースライン プロファイルを使用してこれらをプリコンパイルできます。これにより、起動時間の短縮や、ジャンクのあるフレームのカットなど、パフォーマンスを向上させることができます。

Jetpack Compose の各ライブラリには、それぞれプロファイル ルールが付属しています。アプリがライブラリに依存している場合、ライブラリ プロファイル ルールは自動的にアプリの APK と統合されて配布され、事前コンパイルされます。

次の方法でベースライン プロファイルを確認します。

  • マクロベンチマーク テストを使用します。
  • 特定の ADB コマンドを使用して、アプリのプロファイル構成の状態を検証します。これらの両方の手法の手順については、パフォーマンスの測定と検証ガイドをご覧ください。

起動プロファイル

ベースライン プロファイルのサブセットである起動プロファイルは、アプリの起動レイテンシを短縮するために、含まれるクラスとメソッドをさらに最適化します。

起動プロファイルを追加すると、アプリの APK サイズが増加します。そのため、起動プロファイルを本番環境リリースに追加する前に、APK サイズと起動レイテンシのトレードオフを必ず評価してください。

まず、スタートアップ プロフィールを作成するをご覧ください。

R8

R8 コンパイラを使用して、アプリを圧縮し、最適化します。R8 は、未使用のコードやリソースを削除し、コードを書き換えてランタイム パフォーマンスを最適化します。

パフォーマンスを改善するの概要ガイドで、未使用のリソースを削除するための重要な手順など、R8 に関する考慮事項を確認します。

パフォーマンスの測定と検証

Android での一般的なパフォーマンス測定戦略については、アプリ パフォーマンスの測定の概要をご覧ください。このセクションでは、そのドキュメントで説明されている手法の一部について説明します。

測定用のビルド バリアントを選択する

デバッグモードは多くの問題を見つけるために役立ちますが、パフォーマンスに多大なコストがかかり、ベースライン プロファイルを使用しないため、パフォーマンスに影響する可能性のあるコードの問題を特定することが困難になる場合があります。

アプリのパフォーマンスを正確に把握するには、アプリをリリースモードで実行します。

パフォーマンスに関する最終的な結論は、リリース ビルド オプションで実行されるアプリと実際のデバイスで実施されたテストからのみ導き出してください。

ただし、ベンチマーク テストを行う場合は、リリース デバッグとはいくつかの重要な違いがあるベンチマーク ビルド バリアントを使用します。詳しくは、Macrobenchmark の設定ガイドをご覧ください。

アプリのベースライン プロファイルを検証する

まず、プロファイルのステータスを確認します。

adb shell dumpsys package dexopt | grep -A 1 $PACKAGE_NAME

ステータスが status=speed-profile でない場合は、アプリを最適化するためのプロファイル ルールがまだ適用されていません。

ルールは、デバイスが充電されてアイドル状態になっているときに実行されるバックグラウンド ジョブを使用して適用されます。これを手動でトリガーするには、アプリが起動し、プロファイル インストーラがバックグラウンドでプロファイルをブートストラップするのに十分な時間が経過した後、次のコマンドを実行します。この処理には通常 40 秒ほどかかります。

adb shell cmd package bg-dexopt-job

その後、前のコマンドを再実行して、ステータスが speed-profile であることを確認します。

インストール時に最適化が行われる状況については、ベースライン プロファイルをサイドローディングするをご覧ください。

UI Automator API

UI Automator API は、インタラクションをプログラムで自動化します。この API を使用して、ユーザー ジャーニーを調べて最適化の可能性を探る際に、UI の個別の部分をベンチマークします。

Macrobenchmark テスト

Macrobenchmark は、アプリの比較的大きな領域に対応するユースケース(特にアプリの起動や複雑な UI 操作)をテストします。開始するには、実装ガイドをご覧ください。

マクロベンチマークを使用してベースライン プロファイルのパフォーマンスを検証する例については、GitHub のパフォーマンスのサンプルをご覧ください。

JankStats ライブラリ

JankStats ライブラリを使用して、アプリのパフォーマンスの問題を追跡、分析します。

例については、GitHub の JankStats のサンプルをご覧ください。

システム トレース

Material 3 Expressive で導入された新しいアニメーション タイプを使用すると、Android Studio のシステム トレース機能を使用して、問題が発生する可能性のあるユーザー ジャーニーのレイテンシを検査して診断できます。この情報を使用して、ベースライン プロファイルの内容を確認し、コードロジックの潜在的な非効率性を特定します。

その他のツール

パフォーマンス改善ツールに加えて、生産性とワークフローを改善するために他のツールを使用することもできます。

Android Studio 生産性向上ツール

Android Studio には、パフォーマンス改善の特定にかかる時間を短縮できるツールがいくつか用意されています。

たとえば、ライブ編集コンポーザブル プレビューなどのツールを使用すると、パフォーマンスを改善するために、ぎくしゃくした UI 要素と、アプリのコード内の関連する領域を特定できます。

最終的なパフォーマンス テストはすべて、対象ユーザー層を正確に表す一連の物理 Wear OS デバイスで実施します。

これは、Material 3 Expressive に移行する場合に特に重要です。この移行では、フレックス フォントやシェイプ モーフィングなどの機能がアプリに導入されます。

ビューから移行する場合は、移行ガイドJetpack Compose のパフォーマンスに関するベスト プラクティスを確認して、Jetpack Compose を使用する際にアプリの UI がパフォーマンスを発揮することを確認してください。

その他のリソース

Android のパフォーマンスに関する最新情報を確認するには、アプリのパフォーマンス ガイドの最新のニュースと動画をご覧ください。