0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在 I/O 看未來 | Android 性能相關最新動態(tài)

谷歌開發(fā)者 ? 來源:未知 ? 2023-06-04 23:45 ? 次閱讀
作者 / Ben Weiss

過去幾年來,我們一直致力于讓性能提升工作變得更易上手、回報更高。我們將在本文中分享這一領域的最新發(fā)展動態(tài)。為您介紹基準配置文件Android Studio 中的工具改進、,以及我們如何讓這項技術更好地在后臺為您服務。此外,我們非常高興地分享在基準配置文件上使用的全新實驗性技術,助您大幅提升啟動性能。歡迎您繼續(xù)閱讀以全面了解 2023 年 Google I/O 大會期間發(fā)布的 Android 性能的最新動態(tài),我們也在本文結尾處與您分享了性能探索之旅中切實可行的舉措。

基準配置文件更新

基準配置文件可以通過避免即時 (JIT) 編譯,將應用啟動和運行時的代碼執(zhí)行速度提升約 30%。為此,我們構建了多款工具來幫助您簡化基準配置文件的創(chuàng)建和維護工作,其中包括全新 Android Studio 模板基準配置文件 Gradle 插件。現(xiàn)在,您可以借助 Android Studio Hedgehog 和 Android Gradle 插件 8.0.0 或更新版本,即刻開始使用這兩款工具。

借助基準配置文件 Gradle 插件

簡化配置文件生成

基準配置文件 Gradle 插件可以在本地開發(fā)和 CI 過程中,進一步簡化基準配置文件的生成和維護過程。此插件可以執(zhí)行生成基準配置文件和將其安裝到應用模塊所需的所有必要步驟。 如要使用此插件,您可以在項目中添加一個插樁測試模塊,并設定一組通過在您的應用中導航來模擬關鍵用戶歷程的測試。在運行插樁測試時,基準配置文件 Gradle 插件會跟蹤在這類用戶歷程中執(zhí)行的所有類和方法,并基于這些類和方法生成基準配置文件。然后,此插件會將生成的基準配置文件復制到應用模塊的源集中。 應用此插件后,您可以使用構建腳本中的全新 baselineProfile 塊對其進行配置。generateBaselineProfile 任務會代您運行所有基準配置文件測試。由此生成的配置文件將存儲在生成的文件夾中,供您在此訪問。這些功能使得在本地和遠程 CI 服務器上自動生成基準配置文件的過程更順暢。此外,通過指定要在生成配置文件時使用的 Gradle 管理的設備,您甚至不再需要附加實體設備。此插件的 DSL 支持高度可配置的設置,讓您可以自動化并重現(xiàn)基準配置文件生成過程。 您可以查看代碼示例 (目前位于單獨分支) 和指導文檔,即刻開始使用。

  • 代碼示例

    https://github.com/android/performance-samples/tree/bpgp/MacrobenchmarkSample

  • 指導文檔

    https://developer.android.google.cn/topic/performance/baselineprofiles/create-baselineprofile

使用 AGP 8 及以上版本創(chuàng)建和管理多個基準配置文件源文件

AGP 8 及以上版本支持多源文件、多種特定配置文件和上方提及的新版 Gradle 插件,且支持更輕松地生成基準配置文件。現(xiàn)在,基準配置文件的默認位置是 src/main/baselineProfiles/。此插件可將儲存在此目錄中的基準配置文件源文件提取并合并到您的應用中。幫助您單獨存儲應用啟動和每個不同的用戶歷程所需的配置文件。

06499b3a-02ed-11ee-90ce-dac502259ad0.png

△ Macrobenchmark 示例中的多個基準配置文件源文件

使用 Android Studio 基準配置文件生成器模板更輕松上手

為了幫助您開始使用基準配置文件,Android Studio Hedgehog (2023.1.1) 添加了基準配置文件生成器模塊向導模板。使用此模板,您的應用可以通過視覺輔助方式設置基準配置文件。 首先前往 "文件">"新建">"新模塊",然后在模板列表中選擇 "基準配置文件生成器"。

066884c8-02ed-11ee-90ce-dac502259ad0.png

基準配置文件生成器向導

操作完成后,此模板將為您進行多項更改。它會創(chuàng)建包含基本生成器和基準測試的全新 :baselineprofile 測試模板。BaselineProfileGenerator 類會為您創(chuàng)建基本基準配置文件,而 StartupBenchmarks 可以驗證一切是否合乎預期。此外,系統(tǒng)將在相關模塊中應用基準配置文件 Gradle 插件。最后,此生成器將添加有關 androidx.profileinstaller 的依賴項,以協(xié)助進行本地驗證并確保向后兼容性。

在這里,您只需執(zhí)行 "生成基準配置文件" 運行配置,此操作會運行所含的基準配置文件生成器,并將生成的配置文件復制到src/release/generated/baselineProfile。

06873a08-02ed-11ee-90ce-dac502259ad0.png

△ "生成基準配置文件" 運行配置

運行配置會調用 generateBaselineProfile 任務,查找所有基準配置文件生成器并只運行這些生成器。

BaselineProfileGenerator 是一個非常基礎的生成器,它只會啟動您的應用并等待應用啟動完成。我們建議為您應用的每個關鍵用戶歷程創(chuàng)建一個基準配置文件。由于不同應用的用戶歷程各不相同,您需要自行決定優(yōu)化哪些內容??梢韵葟呐c業(yè)務成果直接相關的任何內容開始,如注冊、登錄、結帳或您應用提供的其他主要操作。您可以從我們的代碼示例中尋找靈感。

  • 應用啟動

    https://developer.android.google.cn/topic/performance/vitals/launch-time

  • 代碼示例

    http://github.com/android/performance-samples/tree/main/MacrobenchmarkSample

歡迎您立即下載 Android Studio Hedgehog Canary,開始體驗:

https://developer.android.google.cn/studio/preview

如需了解整個新手入門過程導覽,您可以查看已更新的 Codelab: 通過基準配置文件提升應用性能:

https://developer.android.google.cn/codelabs/android-baseline-profiles-improve

引入啟動配置文件

和 Dex 布局優(yōu)化

自版本 8.1 起,Android Gradle 插件 (AGP) 便可將應用啟動所需的代碼導入應用的主要 Dex 文件。這項優(yōu)化被稱為 Dex 布局優(yōu)化,有助于減少應用啟動期間發(fā)生的 Dex 頁面錯誤。由于自應用啟動至應用完成啟動的整個過程只需加載一個 Dex 文件,這使得應用啟動速度大幅提升。

06b4aa1a-02ed-11ee-90ce-dac502259ad0.png

Dex 布局優(yōu)化前后

雖然 AGP 可以為您的應用創(chuàng)建單獨的 Dex 文件,但若沒有您的幫助,它無法知道是什么完全定義應用啟動。這時,啟動配置文件就可以派上用場了。您可以將啟動配置文件視作專為應用啟動定制的基準配置文件的一個子集。兩者擁有相同的格式,并且使用相同的底層技術。由于每個應用的啟動過程并不相同,庫對啟動配置文件毫無助益。

與需要解釋和 JIT 編譯的應用相比,基準配置文件使得性能提升了約 30 %,例如在推送更新后。我們對 Dex 布局優(yōu)化進行的早期測試顯示,除了基準配置文件帶來的提升之外,這項優(yōu)化使得應用啟動的性能額外提升了 30%。這些性能提升已經(jīng)在冷啟動中十分常見,即使您的生產(chǎn)應用已經(jīng)擁有運行良好的云配置文件,這項優(yōu)化也會大有裨益。

如要充分利用 Dex 布局優(yōu)化和啟動配置文件,您需要讓 Android 框架知道您的應用何時完成啟動。如果您什么都不做,此框架將在繪制第一幀時便認為應用已經(jīng)完成啟動。為了確保啟動配置文件包含用戶接管之前的所有信息,請使用 reportFullyDrawn API。您可以通過 FullyDrawnReporter 或 Compose ReportDrawn API 實現(xiàn)這一點。此外,您需要定義啟動基準測試的終點,即您認為啟動完成的時間點。將 reportFullyDrawn 調用與您期望在應用可供使用時屏幕上顯示的內容相匹配。

  • FullyDrawnReporter

    https://developer.android.google.cn/reference/kotlin/androidx/activity/FullyDrawnReporter

  • ReportDrawn

    https://developer.android.google.cn/reference/kotlin/androidx/activity/compose/package-summary#ReportDrawn()

您可以在指導文檔中詳細了解 Dex 布局優(yōu)化和啟動配置文件:

https://developer.android.google.cn/topic/performance/baselineprofiles/dex-layout-optimizations

Macrobenchmark 庫的

最新進展

Macrobenchmark 庫讓您可以衡量應用性能,創(chuàng)建基準配置文件并監(jiān)控應用更改對應用性能有無影響。1.2.0 版將很快升級到 Beta 版。以下是一些功能亮點。

在基準測試中使用

全新 Android 平臺功能

在 Android 13 及更高版本中,您可以使用 BaselineProfileRule 在未取得 Root 權限的設備或模擬器上生成基準配置文件。

在 Android 14 及更高版本中,您不再需要每次運行基準測試時都重新安裝目標應用。這讓應用可以在運行之間保存狀態(tài),如緩存、會話狀態(tài)或登錄令牌。此項更改讓您在檢測之前無需手動注入 (需要已取得 Root 權限的設備) 這些狀態(tài)。

新 API

基準配置文件生成已不再處于實驗階段

在使用 collectBaselineProfile 方法創(chuàng)建基準配置文件時,您可以選擇從代碼中刪除實驗性 API 注解。但如果您仍然使用實驗性 API,我們會提供一款新的 API 供您考慮。

新引入的 collectStableBaselineProfile 會運行并等待,直到系統(tǒng)認為配置文件對于給定迭代數(shù)量來說足夠穩(wěn)定。這意味著您應用的基準配置文件將能更好地反映應用在執(zhí)行代碼路徑時的具體操作。
@OptIn(ExperimentalStableBaselineProfilesApi::class)
@Test
fun profileGenerator() {
   rule.collectStableBaselineProfile(
       packageName = TARGET_PACKAGE,
       maxIterations = 10
   ) {
       profileBlock()
   }
}

自定義跟蹤記錄處理讓指標更有效

PerfettoTraceRule 可以在測試中啟用自定義跟蹤記錄收集,而不再需要基準測試 (需要 API 級別 23 及以上)。這是一項非常強大的功能,讓用戶可以收集與測試相關的性能和時間數(shù)據(jù)。

PerfettoTraceProcessor 支持查詢跟蹤記錄內容,并且是所有現(xiàn)有 Macrobenchmark Metric API 的幕后引擎?,F(xiàn)在,您可以將它與 TraceMetric 搭配使用,來制定完全自定義的指標,就像 Macrobenchmark 對 Perfetto 系統(tǒng)跟蹤記錄的任何信息所執(zhí)行的操作一樣。這是另外一項強大的功能,便于用戶進一步自定義基準。

從基準測試中歸因功耗

全新 PowerMetric API 可用于衡量耗電量和電源狀態(tài)。這項非常有用的功能讓用戶可以跟蹤基準測試的耗電量。

問題修復和其他改進

Macrobenchmark 的幕后團隊還在人體工程學方面進行了多項改進,修復了錯誤,并改善了整體行為。如需了解詳情,您可以參閱官方文檔。若要深入了解,您可以查看所有版本說明,其中包含附加代碼和問題跟蹤。

  • 官方文檔

    https://developer.android.google.cn/topic/performance/benchmarking/macrobenchmark-overview

  • 版本說明

    https://developer.android.google.cn/jetpack/androidx/releases/benchmark

Android Studio 電源性能分析器

Android Studio Hedgehog 采用全新性能分析器,可以展示按照子系統(tǒng) (如相機、GPS 等) 細分的實體設備的功耗情況。這些數(shù)據(jù)會在記錄系統(tǒng)跟蹤記錄時提供,并且有助于直觀地將設備功耗與應用中正在發(fā)生的操作關聯(lián)起來。例如,您可以執(zhí)行 A/B 測試,批處理 API 和單獨調用 API,以優(yōu)化蜂窩網(wǎng)絡電源軌中的功耗。

06cfbc92-02ed-11ee-90ce-dac502259ad0.png

Android Studio Hedgehog 中的全新電源性能分析器 (Power Profiler) 首先,使用 Pixel 6 及以上版本的設備記錄系統(tǒng)跟蹤記錄并將其加載至 Android Studio,或者使用性能分析器直接從附加設備捕獲系統(tǒng)跟蹤記錄。
  • 記錄系統(tǒng)跟蹤記錄https://developer.android.google.cn/topic/performance/tracing

為什么需要重視性能

在處理應用性能時,找到正確的入手點并非易事。通過與 Android 開發(fā)者社區(qū)合作,我們發(fā)現(xiàn)工程師有時缺乏正確的信息來證明致力于提升應用性能的重要性。

提升性能對于用戶和企業(yè)來說有諸多優(yōu)勢。對于用戶而言,能夠快速響應的應用可以帶來更出色的用戶體驗。您的用戶將能快速且輕松地獲得他們需要的信息,并且更有可能繼續(xù)使用您的應用。

對于企業(yè)而言,性能提升可以增加收入并降低成本。若用戶滿意您的應用,他們更有可能通過購買或其他操作,促進您的業(yè)務增長。此外,高性能應用有助于節(jié)省開發(fā)和維護成本。

后續(xù)步驟

  1. 借助全新 Gradle 插件設置您的應用,以開始使用基準配置文件
  2. 升級至 Android Gradle 插件 8 及以上版本
  3. 將現(xiàn)有基準配置文件移入新的默認目錄 src/main/baselineProfiles/
  4. 下載 Android Studio Hedgehog Canary,查看基準配置文件模板和電源性能分析器 (Power Profiler)
  5. 查看我們更新的 Codelab 獲取導覽
  6. 使用 Fully Drawn 和 collectStableBaselineProfile API,獲取更完善的基準配置文件
  7. 開始使用 Dex 布局優(yōu)化,獲得更多性能提升
  8. 實施您的專屬 Macrobenchmark 測試,以衡量性能隨時間的變化情況
  9. 在 Pixel 6 及以上版本設備上記錄系統(tǒng)跟蹤,查看不同子系統(tǒng) (相機、GPS、CPU 等) 的功耗
  10. 分享本文,幫助更多開發(fā)者提升應用性能

  • Gradle 插件

    https://developer.android.google.cn/topic/performance/baselineprofiles/create-baselineprofile#baseline-profile-gradle-plugin

  • 基準配置文件

    https://developer.android.google.cn/topic/performance/baselineprofiles/overview

  • Android Studio Hedgehog

    https://developer.android.google.cn/studio/preview

  • 查看我們更新的 Codelab

    https://developer.android.google.cn/codelabs/android-baseline-profiles-improve

  • Dex 布局優(yōu)化

    https://developer.android.google.cn/topic/performance/baselineprofiles/dex-layout-optimizations

073ce5ce-02ed-11ee-90ce-dac502259ad0.gif?點擊屏末||即刻使用基準配置文件

075738a2-02ed-11ee-90ce-dac502259ad0.png

0764f35c-02ed-11ee-90ce-dac502259ad0.png

07911216-02ed-11ee-90ce-dac502259ad0.png


原文標題:在 I/O 看未來 | Android 性能相關最新動態(tài)

文章出處:【微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6106

    瀏覽量

    104816

原文標題:在 I/O 看未來 | Android 性能相關最新動態(tài)

文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    直接I/O

    電子發(fā)燒友網(wǎng)站提供《直接I/O庫.pdf》資料免費下載
    發(fā)表于 10-14 10:55 ?0次下載
    直接<b class='flag-5'>I</b>/<b class='flag-5'>O</b>庫

    物聯(lián)網(wǎng)中常見的I/O擴展電路設計方案_IIC I/O擴展芯片

    物聯(lián)網(wǎng)系統(tǒng)中為什么要使用 IIC I/O擴展芯片 ??物聯(lián)網(wǎng)系統(tǒng)中使用IIC(也稱為I2C)I/O
    的頭像 發(fā)表于 09-24 11:29 ?205次閱讀
    物聯(lián)網(wǎng)中常見的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展電路設計方案_IIC <b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展芯片

    低成本MSP430 MCU中集成I2C I/O擴展器

    電子發(fā)燒友網(wǎng)站提供《低成本MSP430 MCU中集成I2C I/O擴展器.pdf》資料免費下載
    發(fā)表于 09-24 10:56 ?0次下載
    <b class='flag-5'>在</b>低成本MSP430 MCU中集成<b class='flag-5'>I</b>2C <b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展器

    遠程I/O模塊不同領域的應用

    在當今快速發(fā)展的工業(yè)自動化領域,遠程輸入/輸出(I/O)模塊正逐漸成為不可或缺的核心組件,本文將探討遠程I/O模塊不同領域的廣泛應用。 工
    的頭像 發(fā)表于 09-20 16:43 ?235次閱讀

    I/O模塊的主要作用有哪些

    遠程I/O模塊是一種使能遠程數(shù)據(jù)采集和控制的設備。通過使用網(wǎng)絡技術,如現(xiàn)場總線、以太網(wǎng)等,遠程I/O模塊能夠將輸入和輸出信號傳遞給控制系統(tǒng)。這就像控制系統(tǒng)的延伸手臂,能夠觸及并集中處理
    的頭像 發(fā)表于 09-20 16:41 ?278次閱讀

    淺談如何克服FPGA I/O引腳分配挑戰(zhàn)

    所有這些條件將引腳分配給I/O組。 這也是真正開始工作的地方。在當前的設計流程中,引腳分配時一項耗費時間的任務,解決任何性能和信號完整性問題的過程中可能會涉及許多嘗試和錯誤。傳統(tǒng)上,
    發(fā)表于 07-22 00:40

    PLC的I/O點數(shù)是什么意思

    工業(yè)自動化領域中,可編程邏輯控制器(PLC)扮演著至關重要的角色。PLC以其高可靠性、易編程性和強大的控制功能,廣泛應用于各種自動化系統(tǒng)中。而在PLC的性能參數(shù)中,I/O點數(shù)是一個不
    的頭像 發(fā)表于 06-27 11:15 ?2798次閱讀

    FANUC外部I/O點數(shù)不夠用了怎么辦?可以擴展I/O點數(shù)嗎?

    FANUC外部I/O點數(shù)不夠用了怎么辦?可以擴展I/O點數(shù)嗎? 擴展FANUC的外部I/O點數(shù)是
    的頭像 發(fā)表于 02-18 15:21 ?1541次閱讀

    物理約束實踐:I/O約束

    I/O約束(I/O Constraints)包括I/O標準(
    的頭像 發(fā)表于 11-18 16:42 ?988次閱讀
    物理約束實踐:<b class='flag-5'>I</b>/<b class='flag-5'>O</b>約束

    如何快速分析定位 I/O 性能問題

    如何快速分析定位 I/O 性能問題 1. 文件系統(tǒng) I/O性能指標 首先,想到是存儲空間的使用情
    的頭像 發(fā)表于 11-13 14:15 ?922次閱讀
    如何快速分析定位 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>性能</b>問題

    Linux I/O 接口的類型及處理流程

    Linux I/O 接口 Linux I/O 接口可以分為以下幾種類型: 文件 I/O 接口:用
    的頭像 發(fā)表于 11-08 16:43 ?804次閱讀
    Linux <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 接口的類型及處理流程

    Linux系統(tǒng)下I/O操作講解

    Linux系統(tǒng)下I/O 一、I/O簡介 I/O(輸入/輸出)是
    的頭像 發(fā)表于 11-08 15:13 ?1035次閱讀
    Linux系統(tǒng)下<b class='flag-5'>I</b>/<b class='flag-5'>O</b>操作講解

    詳解RAID的存儲性能、更高的I/O性能及可靠性

    RAID(Redundant Array of Independent Disks)是將多塊物理硬盤通過RAID控制卡組合成虛擬的單塊大容量硬盤使用,從而提供比單個硬盤更高的存儲性能、更高的I/O
    的頭像 發(fā)表于 11-07 09:48 ?1759次閱讀
    詳解RAID的存儲<b class='flag-5'>性能</b>、更高的<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>性能</b>及可靠性

    I/O電路中電壓比較器與I/O信號完整性介紹

    高速I/O電路設計中,輸入I/O的比較器是一個非常重要的模塊。
    的頭像 發(fā)表于 10-30 15:02 ?1487次閱讀
    <b class='flag-5'>I</b>/<b class='flag-5'>O</b>電路中電壓比較器與<b class='flag-5'>I</b>/<b class='flag-5'>O</b>信號完整性介紹

    基于Android系統(tǒng)的連連詳細設計說明書

    電子發(fā)燒友網(wǎng)站提供《基于Android系統(tǒng)的連連詳細設計說明書.doc》資料免費下載
    發(fā)表于 10-30 10:12 ?0次下載
    基于<b class='flag-5'>Android</b>系統(tǒng)的連連<b class='flag-5'>看</b>詳細設計說明書