通過基準配置檔案改善應用效能

Android開發者發表於2022-03-14

作者 / Android 開發者關係工程師 Florina Muntenescu

啟動時間的重要性

應用效能和使用者參與度的相關性在許多應用中都有所體現。使用者希望應用響應迅速且能快速載入,而 啟動時間 就是衡量應用效能和質量的主要指標之一。

我們的一些合作伙伴已經投入大量時間和資源來優化應用啟動情況。例如,您可以閱讀了解 Facebook 的優化歷程

本文我們將討論基準配置檔案和其改善應用和開發庫效能的方式,包括它們如何將啟動時間縮短了最高 40%。雖然本文側重於應用啟動,但是基準配置檔案也可以極大改善卡頓情況。

回顧

Android 9 (API 級別 28) 在 Play Cloud 中引入了 ART 優化配置檔案,以縮短應用啟動時間。在雲配置檔案可用時,我們看到應用的冷啟動在不同裝置上平均快了至少 15%。

配置檔案的工作原理

當應用在安裝或更新後首次啟動時,它的程式碼以解釋模式執行,直到被 JIT。由於儲存和載入完全編譯的應用所需的開銷較大,自 Android 6 開始,Java 和 Kotlin 程式碼在 APK 中編譯為 dex 位元組碼,而不是完全編譯為機器程式碼。應用中經常被使用以及用於應用啟動的類和方法,都會被寫入配置檔案。一旦裝置進入閒置模式,ART 就基於這些配置檔案編譯應用,以加快後續的應用啟動。

從 Android 9 (API 級別 28) 開始,Google Play 也會提供雲配置檔案。當應用在裝置上執行時,ART 生成的配置檔案由 Play 商店應用上傳並在雲端聚合。為應用上傳了足夠的配置檔案後,Play 應用將使用聚合的配置檔案來進行後續的安裝。

存在的問題

雖然雲配置檔案在可用時很有幫助,但並非總是在應用安裝後即可使用。收集和聚合配置檔案通常要幾天時間,而許多應用會每週更新,這就是問題所在。而且許多使用者會在雲配置檔案可用之前安裝更新。Google Android 團隊開始尋找其他方法來改善配置檔案延遲。

解決方案

基準配置檔案 是提供配置檔案的一個全新機制,可在 Android 7 (API 級別 24) 和更高版本上使用。基準配置檔案是由 Android Gradle 外掛 生成的 ART 配置檔案,使用可由應用和庫提供的人類可讀懂的配置檔案格式。示例如下:‍

HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
HLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
PLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
HLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I

△ Compose 庫的示例

二進位制檔案儲存在 APK 資源目錄中的特定位置 (assets/dexopt/baseline.prof)。

基準配置檔案在構建時建立,作為 APK 的一部分傳送到 Play 中,然後在下載應用時,從 Play 傳送至使用者。基準配置檔案在雲配置檔案尚不可用時,填補了 ART 雲配置檔案流水線中的空白,在雲配置檔案可用時,則會自動與其合併。

△ 此示意圖展示了從建立到向終端使用者交付的基準配置檔案工作流程。

△ 此示意圖展示了從建立到向終端使用者交付的基準配置檔案工作流程。

基準配置檔案最大的優勢之一是可以 在本地開發和評估,這樣開發者可以看到真實的終端使用者效能改進情況。它們還支援較低的 Android 版本 (7 和更高版本),而云配置檔案只在 Android 9 及以上版本中提供。

影響

應用開發者

2021 年初,Google 地圖的釋出週期從兩週改為一週。更頻繁的更新意味著更頻繁地捨棄本地預編譯,以及更多使用者在沒有 Play Cloud 配置檔案的情況下,遇到啟動緩慢的情況。通過使用基準配置檔案,Google 地圖將平均啟動時間縮短了 30%,搜尋速度相應增長了 2.4%,對於這樣一個成熟的應用來說,這是巨大的效能改進。

庫開發者

庫中的程式碼與應用中的程式碼類似,預設都不是完全編譯,如果它在啟動的關鍵路徑中發揮重要作用,則可能存在問題。

Jetpack Compose 是一個不屬於 Android 系統映像的介面庫,因此與大多數 Android 檢視工具包程式碼不同,它在安裝時並未完全編譯。這導致了效能問題,尤其是在應用前幾次冷啟動時。

為解決這一問題,Compose 使用了配置檔案安裝程式。該程式附帶了基準配置檔案規則,可以縮短 Compose 應用的啟動時間並減少卡頓。

Google Play 商店的搜尋結果頁已經使用 Compose 進行重寫。在整合 Compose 的基準配置檔案規則後,渲染初始搜尋結果頁 (包括影像) 的時間縮短了約 40%。

Android 團隊還將基準配置檔案新增到了相關的 AndroidX 庫。這可讓所有使用這些庫的 Android 應用受益。ConstraintLayout 發現 附帶的配置檔案規則 將動畫幀時間縮短了超過 1 毫秒。

如何使用基準配置檔案

建立自定義基準配置檔案

所有應用和庫開發者都可以從新增基準配置檔案中獲益。理想狀態下,開發者為最關鍵的使用者旅程建立配置檔案,來確保不管雲配置檔案是否可用,這些旅程都擁有始終快速的效能。您可以檢視 詳細指南,瞭解如何為應用和庫開發者設定基準配置檔案。

更新依賴項

如果您還未準備好為應用生成基準配置檔案,您仍然可以受益於更新依賴項。如果您使用 Android Gradle 外掛 7.1.0-alpha05 或更高版本構建應用,您將獲得包含在 APK 中的基準配置檔案,這些配置檔案已經由庫 (例如 Jetpack) 提供。Google Play 在安裝時藉助這些配置檔案編譯應用。您可以將這些配置檔案作為 構建應用的補充部分

衡量改進情況

不要忘記衡量應用改進情況。您可以 按照步驟操作,瞭解如何在本地衡量使用生成的配置檔案的啟動情況。

歡迎您分享體驗反饋

如有其他發現的問題或者內容建議,歡迎您 點選這裡 向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!

相關文章