由於不必處理內含程式碼路徑的即時 (JIT) 編譯步驟和解譯,基準設定檔可將首次啟動時的程式碼執行速度加快約 30%。
如果在應用程式或程式庫中提供基準設定檔,Android 執行階段 (ART) 會透過預先 (AOT) 編譯作業提供最佳的程式碼指定路徑,因此每位新使用者和每次應用程式更新都能獲得效能上的提升。這項設定檔引導最佳化 (PGO) 功能可協助應用程式最佳化啟動作業、減少操作卡頓情形,從使用者首次啟動應用程式開始,就持續改善執行階段整體效能。
這樣的效能提升直接反映在業務指標的表現上,例如使用者留存率、交易和評分等等,都能有所改善。如要進一步瞭解效能提升後對業務指標的影響,可以參考 Josh、Lyft、TikTok 和 Zomato 的案例。
基準設定檔的優點
基準設定檔可以在首次執行後讓所有使用者互動 (例如啟動應用程式、切換不同畫面或捲動內容) 變得更順暢。藉由提升應用程式的執行和回應速度,基準設定檔能吸引更多每日活躍使用者,並提高平均回訪率。
基準設定檔可提供常見的使用者互動,改善應用程式從一開始啟動的執行階段,引導您完成應用程式啟動以外的最佳化作業。引導式 AOT 編譯不需要使用者裝置,且可在開發機器 (而非行動裝置) 上各版本進行一次。發布提供基準設定檔的版本時,應用程式最佳化作業的速度會比只依賴雲端設定檔時更快。
不使用基準設定檔時,所有應用程式程式碼都會在解譯後於記憶體中進行 JIT 編譯,或是在裝置處於閒置狀態時從背景寫入 odex
檔案。在安裝或更新應用程式後,使用者首次執行應用程式的體驗會較差,需等到新程式碼路徑完成最佳化才會改善。許多應用程式經過最佳化調整後,測得的效能可以提升約 30%。
啟動設定檔
啟動設定檔與基準設定檔類似,差別在於前者是在編譯時間使用,而不是用於裝置端最佳化期間。啟動設定檔可用來改善 DEX 檔案的版面配置,以縮短啟動時間。這類設定檔中指定的程式碼位於主要的 classes.dex
檔案中,其他程式碼則位於獨立的 DEX 檔案中,這樣可以減少頁面在應用程式啟動期間出錯的次數,進而縮短啟動時間。如要進一步瞭解啟動設定檔和 DEX 版面配置最佳化程序如何縮短應用程式啟動時間,請參閱「DEX 版面配置最佳化和啟動設定檔」。
開始使用
如要開始最佳化現有應用程式的效能,請參閱「建立基準設定檔」一文。
建議的最低穩定版
依附元件鏈結會提供穩定版和開發版的發布版本。如要產生及安裝基準設定檔,請使用以下支援的 Android Gradle 外掛程式、Macrobenchmark 程式庫和設定檔安裝程式版本 (包括較新的版本)。這些依附元件會在不同時間發揮作用,並以工具鏈的形式搭配運作,達成基準設定檔最佳化。
- Android Gradle 外掛程式:
com.android.tools.build:8.0.0
- Macrobenchmark 程式庫:
androidx.benchmark:benchmark-macro-junit4:1.3.4
- 設定檔安裝程式:
androidx.profileinstaller:profileinstaller:1.4.1
建議您使用最新版的 AGP 建立及管理基準設定檔。以下是各版 AGP 提供的主要功能:
AGP 版本 | 功能 |
---|---|
8.4 | 使用 Gradle 包裝函式指令列工具或 Android Studio 安裝基準設定檔,為非偵錯版本的應用程式進行本機安裝,讓本機發布版本的效能更貼近實際生產環境。這項更新不會影響基準設定檔的實際效能。 |
8.3 |
|
8.2 |
|
8.0 | 最低建議版本:可使用基準設定檔 Gradle 外掛程式,透過單一 Gradle 工作產生基準設定檔。
|
7.4 |
最低支援版本:應用程式可以使用程式庫中的基準設定檔,並在 src/main/baseline-prof.txt 檔案中提供自身專屬的基準設定檔。
|
設定檔產生範例
以下範例類別使用建議的 Macrobenchmark 程式庫,為應用程式啟動作業以及多個導覽和捲動事件建立基準設定檔:
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
您可以在 GitHub 的效能範例中查看此程式碼的完整背景資訊和更多詳細資料。
包含的內容
在應用程式中使用基準設定檔時,您可以加入應用程式啟動程式碼和常見的使用者互動操作,例如捲動或切換畫面的導覽操作。您也可以收集整個流程,例如註冊、登入或付款。凡是您認為重要的使用者歷程,只要能夠改善執行階段效能,即可從基準設定檔中受益。
如果您正在嘗試不同的做法,希望能夠改善應用程式效能,請考慮同時在兩個實驗組中都加入基準設定檔。這麼一來,您就能確保所有使用者都能在相同的基準下執行編譯程式碼,讓結果更容易解讀。
程式庫可提供專屬的基準設定檔,並與發布版本一起供應,改善應用程式效能。如需範例,請參閱「Jetpack Compose 效能」中的「使用基準設定檔」一節。
基準設定檔的運作方式
開發應用程式或程式庫時,建議您定義基準設定檔並涵蓋常見的使用者互動,這些互動的轉譯時間和延遲時間都至關重要。運作方式如下:
系統會產生人類可讀的應用程式設定檔規則,並在應用程式中編譯為二進位檔格式 (可在
assets/dexopt/baseline.prof
中取得)。您隨後可照常將 AAB 上傳至 Google Play。Google Play 會處理設定檔,並連同 APK 直接向使用者發布。在安裝期間,ART 會預先 (AOT) 編譯設定檔中的方法,加快這些方法的執行速度。如果設定檔含有用於應用程式啟動或影格轉譯的方法,使用者可能會獲得更快速的啟動體驗,卡頓情形也會減少。
此流程會與雲端設定檔匯總合作,根據應用程式的實際使用情形微調效能。

雲端設定檔
雲端設定檔提供另一種形式的 PGO,是由 Google Play 商店匯總並與基準設定檔一起發布,方便在安裝時編譯。
雖然驅動雲端設定檔的是使用者與應用程式的實際互動,但雲端設定檔在更新後可能需要幾小時甚至數天的時間才能發布,因此可用性有限。在設定檔完整發布前,全新或更新版應用程式的效能會提供較差的使用者體驗。此外,雲端設定檔僅支援搭載 Android 9 (API 級別 28) 以上版本的 Android 裝置,且只能對使用者數量夠多的應用程式進行適當調整。
各版 Android 的編譯行為
各版 Android 平台採用不同的應用程式編譯方式,各有各的優缺點。基準設定檔會為所有已安裝項目提供資料,藉此改善先前的編譯方法。
Android 版本 | 編譯方法 | 最佳化方法 |
---|---|---|
5 至 6 (API 級別 21 至 23) | 完整 AOT | 整個應用程式在安裝作業期間都會進行最佳化,因此會造成長時間等候使用應用程式、RAM 和磁碟空間使用量增加,以及從磁碟載入程式碼的時間拉長等狀況,甚至冷啟動時間也可能會變長。 |
7 至 8.1 (API 級別 24 至 27) | 部分 AOT (基準設定檔) | 第一次執行應用程式時,系統會透過 androidx.profileinstaller 安裝基準設定檔,那時這個依附元件是由應用程式模組定義。ART 可以在應用程式使用期間新增額外的設定檔規則,並在裝置處於閒置狀態時編譯這些規則,達成進一步改善。這樣可以大幅改善磁碟空間並減少從磁碟載入程式碼的時間,進而縮短應用程式的等待時間。 |
9 (API 級別 28) 以上版本 | 部分 AOT (基準 + 雲端設定檔) | Google Play 會在應用程式安裝期間使用基準設定檔,最佳化 APK 和雲端設定檔 (如果有的話)。安裝完畢後,ART 設定檔會上傳至 Google Play 並進行匯總,然後在其他使用者安裝或更新應用程式時,以雲端設定檔的形式提供。 |
已知問題
以下列出已有解決方案的潛在問題,以及解決方法仍在開發中的問題。
部分裝置 (包括 OnePlus 裝置) 的權限設定可能會導致基準設定檔產生失敗。如要解決這個問題,請在「開發人員選項」設定中關閉「停用權限監控」選項。
Firebase Test Lab 裝置 (包括 Gradle 管理的 Test Lab 裝置) 不支援基準設定檔產生功能 (問題 #285187547)。
如要成功為程式庫提供基準設定檔,請至少使用基準設定檔 Gradle 外掛程式 1.2.3 或 AGP 8.3 (問題 #313992099)。
如果您使用
./gradlew app:generateBaselineProfile
指令產生基準設定檔,測試模組中的基準測試也會執行,且結果會遭到捨棄。如果發生這種情況,您可以使用-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
執行指令,只產生基準設定檔。這個問題已在 AGP 8.2 中修正。用於為所有建構類型產生基準設定檔的指令 (
./gradlew app:generateBaselineProfile
) 只會為發布建構類型產生基準設定檔。這個問題已在 AGP 8.1 中修正。Google Play 商店以外的應用程式發布管道可能不支援在安裝時使用基準設定檔。透過這些管道安裝應用程式的使用者,必須等到 dexopt 在背景執行 (可能是隔日) 後,才會看到相關優勢。
Play 商店內部應用程式分享功能不支援基準設定檔,但內部測試群組則支援。
某些裝置 (例如華為裝置) 的電池效能最佳化設定可能會干擾設定檔的安裝作業。為確保能夠有效安裝設定檔,請停用基準裝置的所有電池效能最佳化設定。
其他資源
為你推薦
建立基準設定檔
Plan to create quality apps and features from the start by understanding best practices and requirements.
手動建立及評估基準設定檔
Plan to create quality apps and features from the start by understanding best practices and requirements.
建立啟動設定檔
Plan to create quality apps and features from the start by understanding best practices and requirements.