建立啟動設定檔

啟動設定檔是基準設定檔的子集。系統會使用啟動設定檔 由建構系統進一步將所含類別和方法最佳化 改善 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 新增至 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")
            })
        }
    }
}

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

確認啟動設定檔最佳化

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

如果啟動類別不符單一 DEX 檔案,Android Studio 會顯示警告。 如要取得包含啟動類別中非啟動方法數量的診斷資訊,請在套用啟動設定檔時,對 settings.gradle 檔案進行以下變更,確保 R8 編譯器至少已更新至 8.3.36-dev 版:

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 追蹤記錄 並尋找長時間執行的作業您也可以使用巨集基準 啟用方法追蹤功能時 ,並在應用程式啟動期間自動完成方法呼叫。