イベントとプログラム

完全に最適化: パフォーマンス スポットライト ウィークのまとめ

所要時間: 3 分

この 1 週間、Android アプリをより高速、軽量、安定したものにするためのベスト プラクティスとガイダンスを詳しくご紹介してきました。R8 オプティマイザーやプロファイルに基づく最適化の基本的な機能から、Jetpack Compose によるパフォーマンスの向上、アプリのパフォーマンスを向上させるための新しいガイドまで、パフォーマンスの高いアプリを構築するために必要な、少ない労力で大きな効果が得られるツールについて説明しました。

この投稿は、最適化が必要になったときにいつでもこれらのリソースにアクセスできるようにするためのインデックスとロードマップとして機能します。ここでは、この共同の取り組みから得られた 5 つの重要なポイントをご紹介します。

R8 オプティマイザーを使用してアプリを高速化する

最も効果が高く、手間のかからない変更は、R8 オプティマイザーを完全に有効にすることです。アプリのサイズを縮小するだけでなく、プログラム全体の詳細な最適化を行い、コードを根本的に書き換えて効率を高めます。保持ルールを見直して、R8 をエンジニアリング タスクに戻します。

R8 オプティマイザーに関する更新および拡張されたドキュメントが、新たに公開されました。

Reddit では、R8 フルモードを有効にした後、コールド スタートアップが 40% 高速化し、ANR エラーが 30% 減少しました。

ブログで導入事例の全文をお読みいただけます。

image.png

Disney+ のエンジニアは、アプリのパフォーマンスに投資し、アプリのユーザー エクスペリエンスを最適化しています。一見小さな変更でも、大きな影響を及ぼすことがあります。R8 構成を調査したところ、-dontoptimize フラグが使用されていることがわかりました。このフラグを削除して最適化を有効にしたところ、Disney+ チームはアプリのパフォーマンスが大幅に向上したことを確認しました。

image.png

アプリのパフォーマンスを改善する方法を尋ねられたら、この投稿へのリンクを共有してください。

詳しくは、1 日目のブログをご覧ください。R8 を使用してアプリを圧縮、最適化、高速化する

パフォーマンスの向上をサポート

ベースライン プロファイルは、ジャストインタイム コンパイルの必要性を効果的に排除し、起動速度、スクロール、アニメーション、全体的なレンダリング パフォーマンスを向上させます。起動プロファイルは、アプリの classes.dex ファイルにインテリジェントな順序を適用することで、アプリの起動をさらに軽量化します。

アプリのパフォーマンスにおけるベースライン プロファイルの重要性について詳しくは、Meta のエンジニアリング ブログをご覧ください。このブログでは、ベースライン プロファイルによって、さまざまなアプリで重要なパフォーマンス指標が最大 40% 改善されたことが紹介されています。

Jetpack Compose 1.10 では、Jetpack Compose のパフォーマンスがさらに向上しています。 一時停止可能なコンポジションやカスタマイズ可能なキャッシュ ウィンドウなどの機能は、複雑なリストアイテムを扱う際にスクロールのジャンクをゼロに保つために不可欠です。詳しくは、#TheAndroidShow の最新エピソードをご覧ください。

詳しくは、水曜日のブログ「パフォーマンスに関する詳細な考慮事項」をご覧ください。

パフォーマンスの測定は 3 つのステップで簡単に

測定できないものを管理することはできません。パフォーマンス レベリング ガイドでは、測定のプロセスを 5 つのステップに分けて説明しています。簡単に利用できるデータから始めて、高度なローカル ツールへと進んでいきます。

レベル 1 では、Android Vitals から簡単に利用できるデータを使用する方法を説明します。Android Vitals では、ANR、クラッシュ、過剰なバッテリー使用量に関するフィールド データが提供されます。

また、レベルアップする方法についても説明します。たとえば、Jetpack Macrobenchmark と新しい UiAutomator 2.4 API を使用して、ローカル パフォーマンス テストでレベル 3 に到達し、アプリのパフォーマンスの変化を正確に測定して検証する方法を説明します。

詳しくは、木曜日のブログをご覧ください。 [木曜日のブログへのリンク: パフォーマンス ジャーニーのレベルアップ ガイド]

デバッグ パフォーマンスが向上

高度な最適化を行っても、クラッシュ レポートが読めなくなることはありません。R8 とバックグラウンド処理を確実にデバッグできるように設計された新機能:

Logcat の自動再トレース

Android Studio Narwhal 以降では、Logcat ウィンドウでスタック トレースの難読化を自動的に解除できます。これにより、プロダクション レディなビルドでクラッシュが発生した場合に、すぐに確認してデバッグできます。

Keep ルールを絞り込む

火曜日には、ランタイム クラッシュを修正するために必要な Keep ルールをわかりやすく説明し、過度に広範なワイルドカードではなく、メンバーレベルの具体的なルールを記述することの重要性を強調しました。また、重要なトピックであるため、動画も作成しました。

Android Studio Otter 3 Feature Drop では、広範な Keep ルールを対象とする新しい lint チェックも導入されています。

image.png

また、R8 構成のテストとトラブルシューティングに関する新しいガイダンスもリリースしました。これにより、構成を正しく設定できるようになります。

詳しくは、火曜日のブログ R8 Keep ルールの構成とトラブルシューティングをご覧ください。

バックグラウンド処理

WorkManager でタスクのスケジュールを設定する際に発生する可能性のある一般的なシナリオのデバッグに関するガイダンスを共有しました。

Background Task Inspector では、WorkManager タスクの視覚的な表現とグラフビューが提供されるため、スケジュール設定された作業が遅延または失敗した理由をデバッグするのに役立ちます。また、バックグラウンド処理のドキュメントのランディング ページが更新され、特定のユースケース向けに最適化されたタスク固有の API がハイライト表示されるようになりました。これにより、より信頼性の高い実行を実現できます。

詳しくは、水曜日のブログをご覧ください。 バックグラウンド処理のパフォーマンスに関する考慮事項

パフォーマンスの最適化は継続的な取り組み

今週のチャレンジで R8 フルモードを有効にできた場合は、次のステップとして、アプリ パフォーマンス スコアを使用して、アプリのパフォーマンスをプロダクト ロードマップに統合します。この標準化されたフレームワークは、継続的な改善のために最も効果的なアクション アイテムを見つけるのに役立ちます。

1 週間の締めくくりとして、#AskAndroid Live Q&A セッションを開催しました。このセッションでは、エンジニアが R8 やプロファイルに基づく最適化などに関する難しい質問に回答しました。見逃した方は、ぜひリプレイをご覧ください。

ご参加いただきありがとうございました。さあ、この勢いで構築を始めましょう。

作成者:
続きを読む