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

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

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

要件

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

  • 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 ブロックに追加し、includeInStartupProfiletrue に設定します。シンプルなアプリの場合は、アプリの 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 ファイルのサイズによって制限されます。つまり、すべてのベースライン プロファイル ジャーニーが起動プロファイル ジャーニーである必要はありません。

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

最初のユースケースをカバーしたら、アプリの起動のユーザー ファネルに沿ってテストします。多くの場合、アプリの起動ファネルは次のようになります。

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

このリストを上から順に処理し、classes.dex がいっぱいになる前に停止します。後でさらに多くのシナリオをカバーするには、起動パスからコードを移動し、さらにシナリオを追加します。コードを起動パスから移動するには、アプリの起動中の Perfetto トレースを調べて、長時間実行オペレーションを探します。また、メソッド トレースを有効にした macrobenchmark を使用して、アプリの起動時のメソッド呼び出しを自動的に完全なビューで確認することもできます。

現在、おすすめはありません。

Google アカウントにしてください。