啟動設定檔是基準設定檔的子集。建構系統會使用啟動設定檔,透過改善 APK DEX 檔案中程式碼的版面配置,進一步最佳化其中包含的類別和方法。使用啟動設定檔時,應用程式啟動速度比只使用基準設定檔時快 15%。
![](https://developer.android.google.cn/static/topic/performance/images/dex-layout-optimizations.png?authuser=9&hl=zh-tw)
規定
我們建議將啟動設定檔與下列工具搭配使用:
- 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 新增至 includeInStartupProfile
設為 true
的 rule
區塊中。如果是簡單的應用程式,啟動應用程式的 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" } } }
使用 Gradle 建構時,請務必在 assembleRelease
後方加上 --info
。
./gradlew assembleRelease --info
診斷結果隨後會列印至終端機。
如果您的應用程式或任何程式庫參照任何脫糖 API,這些類別的相容性實作一律會包含在最後一個 DEX 檔案中。這個脫糖程序不會參與 DEX 版面配置最佳化作業。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 建立基準設定檔 {:#create-profile-rules}
- 基準設定檔 {:#baseline-profiles}
- 編寫 Microbenchmark