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

起動プロファイルはベースライン プロファイルのサブセットです。起動プロファイルの用途 クラスとメソッドをさらに最適化するために、 APK の DEX ファイル内のコードのレイアウトを改善します。起動プロファイルを使用すると ベースライン プロファイルのみを使用した場合と比べて、アプリの起動が最大 15% 高速化されます。

<ph type="x-smartling-placeholder">
</ph>
図 1.DEX レイアウトからのコードの局所性の改善

要件

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

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

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

  • R8 が有効。リリースビルドでは、次のように設定します。 isMinifyEnabled = true
  • DEX レイアウトの最適化を有効にしました。次の baselineProfile {} ブロックでは、 アプリ モジュールのビルドファイルで、dexLayoutOptimization = true を設定します。

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

ベースライン プロファイルとともに起動プロファイルも作成される: デフォルトのベースライン プロファイル ジェネレータ テンプレートを使用してください。

スタートアップ プロファイルを作成して生成する一般的な手順は、 ベースライン プロファイルを作成します。

起動プロファイルを作成するデフォルトの方法は、ベースライン プロファイルを使用することです。 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")
            })
        }
    }
}

Generate Baseline Profile for app 構成を実行して、 起動プロファイルのルール: src/<variant>/generated/baselineProfiles/startup-prof.txt

起動プロファイルの最適化の確認

DEX レイアウトの最適化を確認するには、Android Studio を使用して APK を開き、 DEX ファイル内のクラスを検証できます。メインの classes.dex が以下であることを確認してください。 表示されます。アプリが単一の DEX ファイルで構成されている場合は、 起動プロファイルを有効にした後、アプリに 2 つの DEX ファイルが含まれているかどうか。

起動クラスが 1 つの DEX ファイルに収まらない場合、Android Studio は警告を表示します。 診断情報(起動以外の方法の数を含む)を取得するには、 場合、R8 コンパイラがバージョン 2.0 以降のバージョンに 8.3.36-dev バージョンの settings.gradle ファイルを 起動プロファイルを適用します。

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

Groovy

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

必ず --info を次の日付の後に追加してください Gradle でビルドする場合は、次のコマンドで assembleRelease を使用します。

./gradlew assembleRelease --info

診断情報がターミナルに出力されます。

アプリまたはライブラリが非推奨の API を参照している場合、バンドルされている API これらのクラスの互換性の実装は、常に最後の dex ファイル。この脱糖された最後の DEX ファイルは DEX レイアウトに参加しません 役立ちます