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

要件、作成、ベスト プラクティスについて説明します。 keywords_public: 起動プロファイル、ベースライン プロファイル、アプリのパフォーマンス、APK の最適化、DEX レイアウト、Android Studio、Jetpack Macrobenchmark

起動プロファイルはベースライン プロファイルのサブセットです。起動プロファイルは、ビルドシステムによって使用され、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)を追加するには、アプリの起動 CUJ を includeInStartupProfiletrue に設定された 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")
                })
        }
    }
}

アプリのベースライン プロファイルを生成する構成を実行し、src/<variant>/generated/baselineProfiles/startup-prof.txt でスタートアップ プロファイル ルールを見つけます。このルールは AGP によって自動的に使用されます。

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

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

最初のユースケースが完了したら、アプリの起動に関するユーザー ファネルに沿って進めます。多くの場合、アプリの起動ファネルは次のリストに沿って進みます。

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

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