起動プロファイルはベースライン プロファイルのサブセットです。起動プロファイルは、ビルドシステムによって使用され、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 を rule
ブロックに追加し、includeInStartupProfile
を true
に設定します。シンプルなアプリの場合は、アプリの 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
で起動プロファイル ルールを見つけます。
起動プロファイルの作成に関する考慮事項
起動プロファイルのクラスとメソッドの出力は、最初の classes.dex ファイルのサイズによって制限されます。つまり、すべてのベースライン プロファイル ジャーニーが起動プロファイル ジャーニーである必要はありません。
起動プロファイルを作成する際にカバーするユーザー ジャーニーを決定するには、ほとんどのユーザーがアプリを起動する場所を検討します。通常は、ランチャーからログイン後に行われます。これは、最も基本的なベースライン プロファイルのジャーニーでもあります。
最初のユースケースをカバーしたら、アプリの起動のユーザー ファネルに沿ってテストします。多くの場合、アプリの起動ファネルは次のようになります。
- メイン ランチャー アクティビティ
- アプリの起動をトリガーする通知
- オプションのランチャー アクティビティ
このリストを上から順に処理し、classes.dex がいっぱいになる前に停止します。後でさらに多くのシナリオをカバーするには、起動パスからコードを移動し、さらにシナリオを追加します。コードを起動パスから移動するには、アプリの起動中の Perfetto トレースを調べて、長時間実行オペレーションを探します。また、メソッド トレースを有効にした macrobenchmark を使用して、アプリの起動時のメソッド呼び出しを自動的に完全なビューで確認することもできます。
現在、おすすめはありません。
Google アカウントにログインしてください。