建立啟動設定檔

啟動設定檔是基準設定檔的子集。建構系統會使用啟動設定檔,透過改善 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 中的 Generator 模組範本。包括啟動程序 形成基本啟動設定檔的互動。擴增此啟動設定檔 透過更多關鍵使用者歷程 (CUJ),將應用程式啟動 CUJ 新增至 ruleincludeInStartupProfile 設為 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")
            })
        }
    }
}

執行「Generate Baseline Profile for app」設定,找出 啟動設定檔規則 src/<variant>/generated/baselineProfiles/startup-prof.txt

確認啟動設定檔最佳化

如要確認 DEX 版面配置是否最佳化,請使用 Android Studio 開啟 APK,並 驗證 DEX 檔案中的類別。確認主要 classes.dex 並非 。如果應用程式包含一個 DEX 檔案,您可以檢查 啟動啟動設定檔後,應用程式是否含有兩個 DEX 檔案。

如果啟動類別不符單一 DEX 檔案,Android Studio 會顯示警告。 如要取得診斷資訊,其中包含在 和啟動類別,請確認 R8 編譯器已更新至至少版本 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, 這些類別的相容性實作一律會包含在最近的 DEX 檔案。這個脫糖程序的最後一個 DEX 檔案未採用 DEX 版面配置 以及最佳化調整

建立啟動設定檔的注意事項

啟動設定檔的類別和方法輸出內容會受限於 第一個 class.dex 檔案。這表示並非所有基準設定檔歷程 也應為啟動設定檔的過程

建立啟動設定檔時,如要決定要涵蓋哪些使用者歷程,請考慮 大多數使用者啟動應用程式的位置通常源自啟動器 登入。這也是最基本的基準設定檔 旅程

完成第一個用途後,請按照應用程式啟動程序的使用者漏斗進行。在許多情況下,應用程式啟動漏斗會按照以下清單進行:

  1. 主要啟動器活動
  2. 觸發應用程式啟動的通知
  3. 選用的啟動器活動

從清單頂端開始處理,並在 classes.dex 已滿之前停止。隱藏 之後的歷程、將程式碼移出啟動路徑,以及新增更多 旅程 如要將程式碼移出啟動路徑,請在應用程式啟動期間檢查 Perfetto 追蹤記錄 並尋找長時間執行的作業您也可以使用巨集基準 啟用方法追蹤功能時 ,並在應用程式啟動期間自動完成方法呼叫。