起動プロファイルを作成する

起動プロファイルは、ベースライン プロファイルのサブセットです。起動プロファイルは、ビルドシステムによって使用され、APK の DEX ファイルのコードのレイアウトを改善することで、含まれているクラスとメソッドをさらに最適化します。起動プロファイルを使用すると、アプリの起動は通常、ベースライン プロファイルのみの場合よりも 15% ~ 30% 高速になります。

詳細については、起動プロファイルの概要をご覧ください。

要件

次のツールで起動プロファイルを使用することをおすすめします。

  • Jetpack Macrobenchmark 1.2.0 以降
  • Android Gradle プラグイン(AGP)8.2 以降
  • Android Studio Iguana 以降

また、アプリには次の設定が必要です。

  • R8 が有効になっている。リリースビルドの場合は、isMinifyEnabled = true を設定します。
  • DEX レイアウトの最適化が有効になっている。これは AGP 8.1 以降でのみ使用でき、AGP 8.3 以降ではデフォルトで有効になっています。AGP バージョン 8.1 ~ 8.2 の場合は、アプリ モジュールのビルドファイルの baselineProfile {} ブロックで dexLayoutOptimization = true を設定します。

起動プロファイルを作成する

デフォルトのベースライン プロファイル ジェネレータ テンプレートを使用すると、Android Studio でベースライン プロファイルとともに起動プロファイルが作成されます。

起動プロファイルを作成して生成する一般的な手順は、ベースライン プロファイルを作成する手順と同じです。

起動プロファイルを作成するデフォルトの方法は、Android Studio 内からベースライン プロファイル ジェネレータ モジュール テンプレートを使用することです。これには、基本的な起動プロファイルを形成する起動操作が含まれます。この起動プロファイルにクリティカル ユーザー ジャーニー(CUJ)を追加するには、includeInStartupProfiletrue に設定して、アプリの起動 CUJ を rule ブロックに追加します。シンプルなアプリの場合は、アプリの MainActivity を起動するだけで十分です。より複雑なアプリの場合は、ホーム画面からアプリを起動する、 ディープリンクに移動するなど、アプリへの最も一般的なエントリ ポイントを追加することを検討してください。

次のコード スニペットは、ホーム画面からアプリを起動してディープリンクに移動するベースライン プロファイル ジェネレータ(デフォルトでは BaselineProfileGenerator.kt ファイル)を示しています。ディープリンクは、アプリのホーム画面ではなく、アプリのニュース フィードに直接移動します。

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            uiAutomator {
                // Launch directly into the NEWS_FEED using startActivityIntent
                startIntent(Intent().apply {
                    setPackage(packageName)
                    setAction("com.example.app.NEWS_FEED")
                })
        }
    }
}

[Generate Baseline Profile for app] 構成を実行し、 起動プロファイル ルールを src/<variant>/generated/baselineProfiles/startup-prof.txtで見つけます。このルールは AGP によって自動的に使用されます。

起動プロファイルを作成する際の考慮事項

起動プロファイルを作成する際にどのユーザー ジャーニーをカバーするかを決定するには、ほとんどのユーザーがアプリケーションを起動する場所を考慮します。通常は、ランチャーからログインした後です。これは最も基本的なベースライン プロファイル ジャーニーでもあります。

最初のユースケースがカバーされたら、アプリの起動のユーザー ファネルに従います。多くの場合、アプリの起動ファネルは次のリストに従います。

  1. メイン ランチャー アクティビティ
  2. アプリの起動をトリガーする通知
  3. オプションのランチャー アクティビティ

このリストを上から順に処理し、classes.dex がいっぱいになる前に停止します。後でより多くのジャーニーをカバーするには、起動パスからコードを移動してジャーニーを追加します。起動パスからコードを移動するには、アプリの起動時に Perfetto トレースを検査して、実行時間の長いオペレーションを探します。また、メソッド トレースを有効にした マクロベンチマークを使用して、アプリの起動時のメソッド呼び出しを自動化して完全に把握することもできます。