ベースライン プロファイルと起動プロファイルの違い

このドキュメントでは、ベースライン プロファイルと起動プロファイルの違いについて説明します。

ベースライン プロファイル Gradle プラグインを使用すると、BaselineProfileRule テストで生成された人間が読めるベースライン プロファイル ファイルを自動的にキャプチャできます。アプリをビルドする際、Android Gradle プラグイン(AGP)は、これらの人間が読めるプロファイル ルールをバイナリ形式にコンパイルし、Android パッケージ キット(APK)または Android App Bundle(AAB)内の baseline.prof としてパッケージ化します。バイナリ プロファイルが 1.5 MB 未満であれば、Android ランタイム(ART)はオンデバイス コンパイルにこのバイナリ プロファイルを効果的に使用できます。

生成されるプロファイル ファイルの名前は通常 startup-prof.txtbaseline-prof.txt です。

ベースライン プロファイル

ベースライン プロファイル ファイルには、ART が頻繁に使用されるコードパスを事前コンパイルするために使用する包括的なルールのセットが含まれています。これにより、アプリの起動が最適化され、インタラクション ジャンクが削減され、全体的なランタイム パフォーマンスが向上します。

ベースライン プロファイル ファイルは通常、スタートアップ プロファイルにあるルールのスーパーセットです。このファイルには、アプリの起動の最適化に必要なすべてのルール(baselineProfile Gradle タスクで生成)と、他の重要なユーザー ジャーニーの追加プロファイルが含まれています。たとえば、スクロールや異なる画面間の移動などです。

これらの非起動ルールは、includeInStartupProfile 構成フィールドの値に関係なく生成されます。詳細については、ベースライン プロファイルの概要をご覧ください。

スタートアップ プロファイル

スタートアップ プロファイル ファイルには、アプリのスタートアップ パス用に特別に最適化されたルールが含まれています。コンパイル時に、D8 と R8 は Java バイトコードを使用して Dalvik 実行可能(DEX)ファイルを生成します。D8 と R8 はどちらも起動プロファイルを使用して、重要な起動コードをプライマリ .dex ファイルに配置することで DEX レイアウトを最適化し、クラスの読み込みを高速化します。パフォーマンスを最大限に向上させるには、このプライマリ .dex ファイル内にスタートアップ コードを含める必要があります。起動コードの累積サイズが大きすぎると、後続の DEX ファイルにオーバーフローします。後続の DEX ファイルには、通常、重要でないクラスやメソッドが格納されるため、起動が遅くなります。

起動プロファイルは DEX レイアウトの最適化に必要なメタデータを提供しますが、R8 コードの最適化はこのプロセスを支援するうえで非常に効果的です。R8 は、未使用のコードを削除し、バイトコードを最小化することで、起動ロジックのフットプリントの合計を削減します。この削減により、重要なコードがプライマリ .dex ファイル内に残る可能性が高まり、オーバーフローを防ぎ、幅広い Android バージョンでより効率的な実行を保証します。一般的に、includeInStartupProfile は、アプリの初期表示に不可欠なテスト シナリオでのみ true に設定する必要があります。

詳細については、スタートアップ プロファイルの概要をご覧ください。