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

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

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

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

要件

次のツールでスタートアップ プロファイルを使用することをおすすめします。

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

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

  • R8 が有効になっています。リリースビルドでは、isMinifyEnabled = true を設定します。
  • DEX レイアウトの最適化が有効になっています。アプリ モジュールのビルドファイルの 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 トレースを検査し、実行時間の長いオペレーションを探します。また、メソッド トレースを有効にしたマクロベンチマークを使用して、アプリの起動時のメソッド呼び出しを自動化された完全なビューで確認することもできます。