操作說明

成效歷程等級指南

9 分鐘閱讀
Alice Yuan
開發人員關係工程師

成效歷程升級指南

歡迎來到「成效焦點週」第 4 天。您已瞭解我們最近推出的幾項實用工具和最佳做法,例如 R8 最佳化工具,以及透過基準設定檔啟動設定檔進行設定檔引導最佳化,現在可能想知道該從何著手提升效能。

我們提供逐步成效分級指南,協助行動開發團隊瞭解目前狀況,無論您是剛開始著手提升成效的單一開發人員,還是有專責團隊負責改善 Android 效能,都能派上用場。

成效等級指南分為 5 個等級。我們將從第 1 級開始,介紹採用效能工具的最低門檻,然後逐步進階到第 5 級,適合有資源維護專屬效能架構的應用程式。

 
歡迎直接前往最符合您需求的層級:

第 1 級:使用 Play 管理中心提供的欄位監控功能

建議您先在 Play 管理中心使用 Android Vitals,查看系統自動收集的欄位監控資料,輕鬆取得應用程式的深入分析資訊。

Android Vitals 是 Google 的一項計畫,可自動收集並向您顯示這類實際資料。

以下說明我們如何提供這項資料:

  1. 收集資料: 使用者選擇加入後,Android 裝置會自動記錄所有應用程式 (包括您的應用程式) 的重要效能和穩定性事件。
  2. 匯總資料:Google Play 會收集應用程式使用者的這類資料,並進行去識別化處理。
  3. 介面深入分析:資料會顯示在 Google Play 管理中心的 Android Vitals 資訊主頁

Android Vitals 資訊主頁會追蹤許多指標,但只有少數指標會指定為核心指標。這些指標最為重要,因為會影響應用程式在 Google Play 商店的能見度和排名。

核心指標

GOOGLE PLAY 的核心技術品質指標

為提高應用程式在 Google Play 上的能見度,請注意不要超過這些指標的不良行為門檻。

使用者感知的當機率每日活躍使用者中,至少遇到一次當機事件 (使用者可能已注意到) 的人數百分比
使用者感知的 ANR 發生率每日活躍使用者中,至少遇到一次可能已注意到的 ANR 事件的人數百分比
電池用量過高每小時電池用量超過 4.44% 的錶面工作階段百分比
新功能:部分 Wake Lock 使用過度累計非豁免 Wake Lock 用量超過 2 小時的使用者工作階段百分比

核心指標包括使用者感知當機率、ANR 發生率、耗電量過高,以及新推出的部分 Wake Lock 停滯次數過多指標。

使用者感知 ANR 事件的發生率

您可以透過 Android Vitals ANR 資訊主頁,查看現場發生的問題的堆疊追蹤記錄,並取得有關如何修正問題的深入分析和建議。

crashesAnrs.png

您可以深入瞭解發生的特定 ANR,查看堆疊追蹤記錄,以及可能導致問題的原因洞察。

insights.png

此外,請參閱我們的 ANR 指南,協助您診斷及修正可能發生 ANR 的常見情境。

使用者感知當機率

使用 Android Vitals 當機資訊主頁進一步偵錯當機問題,並查看應用程式中發生的堆疊追蹤範例。

我們的說明文件也提供排解特定當機問題的指引。舉例來說,前景服務疑難排解指南會討論如何找出並修正導致當機的常見情境。

電池用量過高

如要減少 Wear OS 錶面工作階段的耗電量,請參閱 Wear 指南,瞭解如何改善及節省電量

[新] 部分 Wake Lock 使用過度

 

我們最近宣布,自 2026 年 3 月 1 日起,部分 Wake Lock 使用過度的應用程式可能會受到額外處置。

在行動裝置上,Android Vitals 指標適用於螢幕關閉時取得的非豁免 Wake Lock,且應用程式處於背景或執行前景服務。如果 Wake Lock 在 24 小時內持續至少兩小時,且影響超過 5% 的應用程式工作階段 (28 天的平均值),Android Vitals 就會將部分 Wake Lock 用量視為過多。

如要偵錯及修正過度 Wake Lock 的問題,請參閱我們的技術網誌文章

請參閱 Android Vitals 說明文件,繼續瞭解如何善用 Android Vitals。

第 2 級:按照應用程式效能分數待辦事項操作

接著,請使用應用程式效能分數找出高槓桿待辦事項,進一步提升應用程式效能。

Android 應用程式效能分數是標準化架構,可評估應用程式的技術效能。系統會提供 0 到 100 的分數,分數越低代表改善空間越大。

如要輕鬆獲得勝利,請先從靜態效能分數開始。這些通常是設定變更或工具更新,可大幅提升效能。

步驟 1:執行靜態評估

靜態評估會評估專案的設定和工具採用情況。這些通常是提升成效最快的方法。

前往計分板頁面的「靜態分數」部分,然後執行下列操作:

  1. 評估 Android Gradle 外掛程式 (AGP) 版本。
  2. 建議逐步採用 R8 縮減功能,或使用完整模式的 R8 縮減及最佳化應用程式程式碼。
  3. 採用基準設定檔,從首次啟動起提升程式碼執行速度,為每次安裝新應用程式和每次應用程式更新提供效能提升。
  4. 採用啟動設定檔,改善 Dex 版面配置。建構系統會使用啟動設定檔,改善 APK DEX 檔案中的程式碼版面配置,進一步最佳化所含的類別和方法。
  5. 升級至最新版 Jetpack Compose

步驟 2:執行動態評估

套用靜態簡單改善項目後,請使用動態評估,在實際裝置上驗證改善成效。你可以先使用實體裝置和碼錶手動執行這項操作。

前往計分板頁面的「動態分數」部分,然後執行下列操作:

  1. 使用實體裝置設定測試環境。建議使用低階裝置,放大效能問題,方便您找出問題。
  2. 從啟動器測量啟動時間。從啟動器圖示冷啟動應用程式,並測量應用程式進入互動狀態所需的時間。
  3. 從通知測量應用程式啟動時間,目標是將通知啟動時間縮短至幾秒內。
  4. 捲動瀏覽核心畫面和動畫,評估轉譯效能。

完成這些步驟後,您會收到靜態和動態分數 (1 到 100 分),瞭解應用程式的效能和應著重改善的部分。

第 3 級:善用本機效能測試架構

開始評估動態效能後,您可能會發現手動評估效能太過繁瑣。建議您使用 Macrobenchmark 和 UiAutomator 等效能測試架構,自動執行效能測試。

Macrobenchmark 💚 UiAutomator

您可以將 Macrobenchmark 和 UiAutomator 視為兩項搭配運作的工具:Macrobenchmark 是評估工具,這就像在應用程式外部執行的碼錶和影格速率計數器,負責啟動應用程式、記錄指標 (例如啟動時間或捨棄的影格),以及停止應用程式。UiAutomator 是機器人使用者。您可以使用這個程式庫編寫程式碼,與裝置螢幕互動。例如尋找圖示、輕觸按鈕或捲動清單。

如何編寫測試

編寫測試時,請將 UiAutomator 程式碼包裝在 Macrobenchmark 區塊內。

  1. 定義測試:使用 @MacrobenchmarkRule
  2. 開始測量:撥打 benchmarkRule.measureRepeated
  3. 操控 UI:在該區塊中,使用 UiAutomator 程式碼啟動應用程式、尋找 UI 元素,並與這些元素互動。

以下是程式碼片段範例,說明如何測試 Compose 清單是否有捲動卡頓。

  benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

4. 查看結果:每次測試執行都會提供精確的測量資訊,讓您取得應用程式效能的最佳資料。

  timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

常見用途

Macrobenchmark 提供多項現成核心指標。StartupTimingMetric 可讓您準確測量應用程式啟動時間。您可透過 FrameTimingMetric 瞭解測試期間的應用程式轉譯效能。

我們提供詳細完整的指南,說明如何搭配使用 Macrobenchmark 和 UiAutomator,以及程式碼範例,方便您繼續學習。

第 4 級:使用 Perfetto 等追蹤記錄分析工具 

如果您需要查看自家應用程式程式碼以外的內容,可以使用 Perfetto 等追蹤記錄分析工具。與只能查看程序的標準偵錯工具或分析器不同,Perfetto 會擷取整個裝置的狀態 (包括核心排程、CPU 頻率、其他程序和系統服務),提供效能問題的完整脈絡。

請參閱「效能偵錯」YouTube 播放清單,觀看影片瞭解如何使用系統追蹤記錄、Android Studio 分析器和 Perfetto 進行效能偵錯。

如何使用 Perfetto 偵錯效能

使用追蹤記錄分析工具偵錯效能的一般工作流程是記錄、載入及分析追蹤記錄。

步驟 1:記錄追蹤記錄

您可以透過多種方法錄製系統追蹤記錄:

步驟 2:載入追蹤記錄

取得追蹤檔後,請將其載入分析工具。

  1. 開啟 Chrome 並前往 ui.perfetto.dev
  2. .perfetto-trace (或 .pftrace) 檔案直接拖曳到瀏覽器視窗。
  3. 使用者介面會處理檔案並顯示時間軸。

步驟 3:分析追蹤記錄

您可以使用 Perfetto UI 或 Android Studio Profiler 找出效能問題。歡迎觀看 MAD Skills 系列影片的這集「效能」,聽聽效能工程師 Carmen Jackson 討論 Perfetto 追蹤檢視器。

使用 Perfetto 檢查系統追蹤記錄的情境

Perfetto 是一項專業工具,可提供追蹤記錄擷取期間 Android 裝置上發生的所有事件資訊。如果您無法使用標準記錄或基本分析器找出速度變慢的根本原因,這項功能就特別實用。

偵錯卡頓 (捨棄的影格)

如果應用程式在捲動時會頓挫,Perfetto 可以準確顯示特定影格錯過期限的原因。

如果是應用程式所致,您可能會看到主執行緒長時間執行大量剖析作業;這表示您應將工作移至非同步處理。

如果是系統所致,您可能會看到主執行緒已準備好執行,但 CPU 核心排程器優先處理其他系統服務,導致應用程式等待 (CPU 爭用)。這表示您可能需要最佳化平台 API 的使用方式。

分析應用程式啟動緩慢的問題

啟動程序相當複雜,涉及系統初始化、程序分叉和資源載入。Perfetto 會精確呈現這個時間軸。

您可以查看是否正在等待 Binder 呼叫 (程序間通訊)。如果 onCreate 等待系統 PackageManager 回應的時間過長,Perfetto 會清楚顯示封鎖狀態。

您也可以查看應用程式在啟動期間是否執行了不必要的工作。舉例來說,如果您建立及配置的檢視區塊超出應用程式顯示所需,您可以在追蹤記錄中看到這些作業。

調查電池耗電量和 CPU 使用率

由於 Perfetto 會監控整個系統,因此非常適合找出隱藏的耗電問題。

在「裝置狀態」軌跡下方,您可以找出持有喚醒鎖定,導致裝置無法進入休眠狀態的程序。詳情請參閱我們的喚醒鎖定網誌文章。此外,您也可以使用 Perfetto,查看背景工作是否執行過於頻繁,或是否不必要地喚醒 CPU。

第 5 級:建立專屬的成效追蹤架構

最後一個層級適用於有資源維護成效追蹤架構的團隊。

在 Android 上建構自訂效能追蹤架構時,需要運用多個系統 API,在應用程式生命週期 (從啟動到結束) 和特定高負載情境中擷取資料。

使用 ApplicationStartInfoProfilingManagerApplicationExitInfo,您可以建立強大的遙測系統,回報應用程式的啟動方式、執行期間的詳細資訊,以及終止原因。

ApplicationStartInfo:追蹤應用程式的啟動方式

ApplicationStartInfo 可在 Android 15 (API 35) 以上版本使用,提供應用程式啟動的詳細指標。資料包括啟動類型 (冷啟動、暖啟動或熱啟動),以及不同啟動階段的持續時間。

這有助於您使用生產資料開發基準啟動指標,進一步最佳化可能難以在本機重現的項目。您可以運用這些指標進行 A/B 測試,進一步改善啟動流程。

目標是準確記錄啟動指標,而不必手動監控每個初始化階段。

您可以在應用程式啟動後一段時間,延遲查詢這項資料。

ProfilingManager:擷取速度緩慢的原因

ProfilingManager (API 35) 可讓應用程式在使用者裝置上以程式輔助方式觸發系統追蹤。這項功能非常實用,可捕捉您無法在本機重現的暫時性效能問題。

目標是偵測到特定關鍵使用者歷程執行緩慢或發生效能問題時,自動記錄追蹤記錄。

您可以註冊在符合特定條件時觸發的監聽器,或在偵測到卡頓、記憶體用量過高或電池耗電等效能問題時,手動觸發監聽器。

請參閱如何擷取設定檔擷取及分析剖析資料,以及使用偵錯指令的相關文件。

ApplicationExitInfo:追蹤應用程式終止的原因

ApplicationExitInfo (API 30) 會說明先前程序終止的原因。這對於找出原生當機、ANR 或因記憶體用量過多 (OOM) 而導致的系統終止至關重要。您也可以使用 getTraceInputStream API 取得詳細的墓碑追蹤記錄。

這個 API 的目標是瞭解不會觸發標準 Java 異常終止報告工具 (例如低記憶體終止) 的穩定性問題。

您應在 下次啟動應用程式時觸發此 API。

後續步驟

提升 Android 效能是循序漸進的過程。我們很期待看到大家使用這些工具,讓成效更上一層樓!

明天記得收看「Ask Android」

您已使用 R8 縮減應用程式,並透過設定檔指引最佳化功能,最佳化執行階段。並評估應用程式成效。

歡迎參加明天的 Android 即時問答活動。現在就使用 #AskAndroid 提問,讓專家為你解答。

撰寫者:

繼續閱讀