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

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

図 1. DEX レイアウトの最適化によるコードの局所性の改善

要件

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

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

また、次の設定も必要です。

  • R8 が有効になっている。リリースビルドの場合は、isMinifyEnabled = true を設定します。
  • DEX レイアウトの最適化が有効になっています。テスト モジュールのビルドファイルの baselineProfiles {} ブロックで、dexLayoutOptimization = true を設定します。

スタートアップ プロファイルを作成する

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

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

起動プロファイルを作成するデフォルトの方法は、Android Studio 内からベースライン プロファイル ジェネレータ モジュール テンプレートを使用することです。これには、基本的な起動プロファイルを形成する起動インタラクションが含まれます。このスタートアップ プロファイルにクリティカル ユーザー ジャーニー(CUJ)を追加するには、includeInStartupProfiletrue に設定した rule ブロックにアプリ起動の CUJ を追加します。単純なアプリでは、アプリの 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
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

[アプリのベースライン プロファイルを生成] 構成を実行し、src/<variant>/generated/baselineProfiles/startup-prof.txt で起動プロファイル ルールを見つけます。