事例紹介

Monzo、シンプルな R8 の更新でパフォーマンス指標を最大 35% 向上

所要時間: 2 分

Monzo は、1,500 万人以上の顧客を抱える英国のデジタル バンクです。アプリの規模が拡大するにつれて、エンジニアリング チームはアプリの起動時間を改善すべき重要な領域として特定しましたが、コードベースに大幅な変更が必要になることを懸念していました。

R8 の最適化を完全に有効にすることで、Monzo はアプリケーション応答なし(ANR)の発生率を 35% も削減しました。このシンプルな変更は、効果的な最適化に必ずしも複雑なエンジニアリング作業が必要なわけではないことを証明しました。

R8 フルモードでパフォーマンスを大幅に向上

Monzo は、R8 フルモードを試す価値のある簡単な修正方法として特定しました。そして、この方法が功を奏し、全体的なパフォーマンスが向上しました。

  • 起動の信頼性: コールド スタートが 30%、ウォーム スタートが 24%、ホットスタートが 14% 改善されました。
  • 起動速度: P50 の起動時間が 11%、P90 の起動時間が 12% 改善されました。
  • 効率性: アプリの全体的なサイズが 9% 削減されました。
  • 安定性: ANR が 35% 減少。
AANDDM_Monzo_Quote-1.png
large_AANDDM_Monzo_Quote-2.png

1 つの変更で最適化を有効にする

多くの Android アプリは、R8 オプティマイザーのほとんどの機能を無効にする古いデフォルト構成ファイルを使用しています。proguard-android.txt デフォルト ファイルを proguard-android-optimize.txt に置き換えることが、Monzo がこれらのパフォーマンス改善を実現するために行った主な変更でした。この変更により、-dontoptimize 命令が削除され、R8 が適切に機能するようになります。

buildTypes {
  release {
    isMinifyEnabled = true
    isShrinkResources = true
    proguardFiles(
      getDefaultProguardFile("proguard-android-optimize.txt"),
    )
  }
}

この変更を行った後、Keep 構成ファイルを確認することをおすすめします。これらのファイルは、コードのどの部分をそのままにするかを R8 に指示します(通常、それらの部分は動的に呼び出されるか、外部ライブラリによって呼び出されるためです)。不要な Keep ルールを整理することで、R8 の機能をさらに活用できます。

ベースライン プロファイルを使用してスクロールのパフォーマンスを改善する

ユーザー エクスペリエンスをさらに向上させるため、Monzo はベースライン プロファイルを実装し、特にメインフィードのスクロールとレンダリングのパフォーマンスをターゲットにしました。この戦略により、アプリを開く、フィードをスクロールするなど、最も一般的なユーザー ジャーニーが完全に最適化されました。レンダリングへの影響は大きく、P90 のスクロール パフォーマンスは 71% 高速化し、P95 のスクロール パフォーマンスは 87% 向上しました。アプリのスクロールが以前よりもスムーズになりました。

Monzo は、この改善を長期にわたって維持するために、リリース プロセスにこの機能を組み込みました。「ベースライン プロファイルの生成は、毎週平日に(ナイトリー ビルドの実行前に)トリガーし、完了したら最新の変更を commit しています」と Neumayer 氏は説明します。

最新の Android 開発に遅れずについていく

Monzo の事例は、Android ビルドツールの推奨事項を常に最新の状態に保つことで何が可能になるかを示しています。レガシーアプリでは、複雑なリフレクションの使用に苦労することがよくありますが、Monzo は Keep ルールを適切に文書化することで、移行をスムーズに行うことができました。「私たちは、保持ルールが適用されている理由を説明するコメントを必ず追加しています。これにより、ルールを安全に削除できるタイミングを把握できます」と Neumayer 氏は述べています。

Neumayer 氏から他のチームへのアドバイスは、現在の基準に照らして、実践していることを定期的に確認する: 「アプリのパフォーマンスに関する Google の最新の推奨事項を確認し、最新のアドバイスをすべて実践しているかどうかを確認してください。」

R8 の使用を開始する方法と詳細については、https://d.android.com/r8 をご覧ください。

作成者:
続きを読む