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 を使用して、ユーザー ジャーニーを検査し、最適化の可能性を探る際に、UI の個別の部分をベンチマークします。

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