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 のパフォーマンスに関する最新情報については、アプリのパフォーマンス ガイドの最新ニュースと動画をご覧ください。