啟動設定檔是基準設定檔的子集。建構系統會使用啟動設定檔,透過改善 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 中的 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 會顯示警告。
如要取得診斷資訊,其中包含在
和啟動類別,請確認 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 檔案。這表示並非所有基準設定檔歷程 也應為啟動設定檔的過程
建立啟動設定檔時,如要決定要涵蓋哪些使用者歷程,請考慮 大多數使用者啟動應用程式的位置通常源自啟動器 登入。這也是最基本的基準設定檔 旅程
完成第一個用途後,請按照應用程式啟動程序的使用者漏斗進行。在許多情況下,應用程式啟動漏斗會按照以下清單進行:
- 主要啟動器活動
- 觸發應用程式啟動的通知
- 選用的啟動器活動
從清單頂端開始處理,並在 classes.dex 已滿之前停止。隱藏 之後的歷程、將程式碼移出啟動路徑,以及新增更多 旅程 如要將程式碼移出啟動路徑,請在應用程式啟動期間檢查 Perfetto 追蹤記錄 並尋找長時間執行的作業您也可以使用巨集基準 啟用方法追蹤功能時 ,並在應用程式啟動期間自動完成方法呼叫。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 建立基準設定檔 {:#create-profile-rules}
- 基準設定檔 {:#baseline-profiles}
- 編寫 Microbenchmark