事例紹介

Monzo はシンプルな R8 アップデートでパフォーマンス指標を最大 35% 向上

所要時間: 2 分
Ben Weiss
デベロッパー リレーション エンジニア

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

R8 最適化を完全に有効にしたことで、Monzo はアプリケーション応答なし(ANR)エラーの発生率を 35% も削減しました。この簡単な変更により、影響力の大きい最適化には必ずしも複雑なエンジニアリング作業が必要ないことが証明されました。

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

Monzo は、R8 フルモードが試す価値のある簡単な修正であると判断しました。そして、実際に 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 オプティマイザーのほとんどの機能を無効にする古いデフォルトの構成ファイルが使用されています。Monzo がパフォーマンスを向上させるために行った主な変更は、proguard-android.txt のデフォルト ファイルを proguard-android-optimize.txt に置き換えたことです。この変更により、-dontoptimize 命令が削除され、R8 が適切に処理できるようになります。

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

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

ベースライン プロファイルでスクロール パフォーマンスを改善する

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

Monzo は、この改善を維持するために、リリース プロセスにこの機能を組み込みました。「ベースライン プロファイルの生成は、毎営業日(ナイトリー ビルドを実行する前)にトリガーされ、完了すると最新の変更がコミットされます」と Neumayer 氏は説明します。

最新の Android 開発に対応する

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

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

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

作成者:

続きを読む