排解建構效能問題

在執行 Android Gradle 外掛程式 4.0.0 以上版本的 Android Studio 4.0 以上版本中,您可以使用版本分析器檢查專案的建構效能。您的建構效能可能會因為版本變更的幾項因素而受到影響。針對您執行的每項建構作業,版本分析器會嘗試呈現每項建構作業的最重要資訊,以便您快速找出並解決建構效能中的迴歸問題。

本資訊頁面提供建構分析器的總覽,並提供如何使用工具提升專案建構效能的指南。如果您尚未執行,可參閱最佳化建構速度一文,嘗試其他改善建構效能的策略。

分析器呈現的資料會根據每次建構作業而改變。特別是對大型的複雜建構作業而言,有許多因素會在建構作業之間發生變化,進而改變做為建構時間長度重要因素的分析器顯示資料。因此,建議您多次建構專案,並比較分析器中的資料來識別模式。

立即開始

每次建構應用程式時,版本分析器都會建立一份報表,並在「Build」(版本) 視窗中顯示最新報表的資料。如要開始使用,請按照下列指示操作:

  1. 請確認您使用的是執行 Android Gradle 外掛程式 4.0.0 以上版本的 Android Studio。
  2. 如果尚未建立應用程式,請透過下列其中一種方式建構應用程式:
    • 在選單列中,依序按一下「Build」(建立) >「Make Project」(建立專案)
    • 在選單列中,依序按一下「Build」(建構) >「Build Bundle(s) / APK(s)」(建構套裝組合 / APK) >「Build Bundle(s)」(建構套裝組合) 或「Build」(建構) >「Build Bundle(s) / APK(s)」(建構套裝組合 / APK) >「Build APK(s)」(建構 APK) 以建構 Android App Bundle 或 APK。
  3. 在選單列中依序選取「View」(檢視) >「Tools Windows」(工具視窗) >「Build」(建構),即可開啟「Build」(建構) 視窗。
  4. 在「Build」(建構) 視窗中,按一下「Build Analyzer」(版本分析器) 分頁標籤,在「Build Analyzer」(版本分析器) 中檢視建構報表。

圖 1. 版本分析器會詳細列出對建構作業時間長度影響程度最大的外掛程式。

開啟「版本分析器」後,視窗中會詳細列出對建構作業時間長度影響最大的外掛程式,以及協助您瀏覽建構作業中其他實用資料的樹狀結構,如圖 1 所示。

請務必注意,版本分析器不會顯示建構作業中所有工作的資料。而只會專注於判斷建構總時間長度的工作。

哪些工作決定建構時間長度?

Gradle 會根據工作相互依賴性、專案結構和 CPU 負載,以及工作是否依序或同時執行來決定工作的執行情形。在特定建構作業中,版本分析器會醒目顯示用於決定目前建構時間長度的依序執行工作組合。解決這些醒目顯示工作效率不彰的做法,是縮短整體建構時間的最佳起點。

請注意,您可能會發現會有不同的組合決定每組執行建構作業的建構時間長度。舉例來說,如果您變更了建構設定,請使用不同的工作組合 (例如增量建構) 執行建構作業,或是在不同限制下 (例如較大 CPU 負載),建構速度視窗可能會醒目顯示影響該建構作業時間長度最大的不同工作組合。因為這種變化性,您可能需要在多個建構作業中使用建構速度視窗,以持續縮短建構時間長度。

具有用來決定建構時間長度之工作的外掛程式

完成建構後初次開啟版本分析器時,該視窗會顯示外掛程式的資料,並用於導入判斷建構時間長度的工作,如圖 1 所示。畫面右側,視窗以視覺化方式呈現這些外掛程式及其與建構時間長度的相對貢獻。可讓您迅速找出可能需要先檢查的外掛程式。

在左側窗格中,您可以展開「Plugins with tasks determining the build’s duration」(判斷建構時間長度工作的外掛程式) 旁的節點,來查看版本分析器針對每個外掛程式收集的資料。例如,每個外掛程式都包含一個子節點,將 Gradle 在上次建構期間執行的工作加以分組,而分析器會將該事件視為總建構時間長度中的重點因素。每個節點都會顯示執行節點直接子項所需的總時間。這些時間長度可協助您專注於檢查對建構時間長度影響最大的工作。

如果版本分析器聲明某些工作可以更有效率地執行,則會將這些工作分組至「Warning」(警告) 標示的節點下。您也可以展開靠近左側窗格底部的頂層「Warning」(警告) 節點,以檢查建構作業的所有警告。

決定建構時間長度的工作

當您從樹狀結構中選取「Tasks this build of duration」(決定建構時間長度的工作) 節點的工作時,版本分析器會顯示對建構時間長度影響最大的工作視覺化分析。也就是說,這個節點不會由外掛程式將工作分組,而是會按執行工作所需的時間長度來排名各工作。

各項工作會以不同顏色標示如下:

  • 粉紅色:此工作屬於 Android Gradle 外掛程式、Java Gradle 外掛程式或 Kotlin Gradle 外掛程式。
  • 藍色:此工作屬於第三方或自訂外掛程式。例如,使用 Android Studio 建立新專案後可套用的外掛程式。
  • 紫色:此工作不屬於外掛程式,但用於在執行階段動態修改專案屬性。舉例來說,您可以在 build.gradle 檔案中定義這些工作。
  • 淺藍色:相對於分析器醒目顯示的其他工作,此工作不會對建構時間長度產生明顯影響。

展開「Tasks determining this build’s duration」(決定此建構時間長度的工作) 節點後,您可點選各項子工作以進一步瞭解其執行作業。例如,分析器會提供其他詳細資料,例如父項外掛程式、工作類型、導致這項工作執行的其他工作,以及工作是否增量執行,如圖 2 所示。分析器可能也會引發警告,藉此協助您設定工作更有效率的執行。

圖 2. 版本分析器會顯示特定工作執行作業的詳細資料。

檢查警告

版本分析器偵測到無法有效執行的工作時,就會發送警告。舉例來說,如果工作並未使用適當的 Gradle API 來指定其輸入和輸出內容,就無法運用增量建構作業。如果您的建構作業包含這類工作,版本分析器可能會透過「Always-run」(一律執行) 警示來標記這些工作,因為無論輸入內容的變更為何,都必須搭配建構作業執行。

如要查看分析器找到的建構作業的所有警告,請展開頂層「Warning」(警示) 節點。展開節點後,您就能查看依類別分組的警示訊息。例如,「Always-run」(一律執行) 節點會將分析器認為增量建構未正確設定的工作分組。

按一下子節點,分析器會說明警示的性質,以及解決問題可採取的步驟。此外,如果工作屬於您套用至專案的外掛程式,則分析器會提供「Generate report」(產生報表) 連結 (如圖 3 所示)。

圖 3. 進一步瞭解版本分析器警示。

當您按一下「Generate report」(產生報表) 連結時,畫面上會出現一個含有其他資訊的對話方塊,協助外掛程式開發人員在新版外掛程式中解決問題。按一下「Copy」(複製) 即可將文字儲存至剪貼簿,方便您將資訊貼到外掛程式開發人員的報表中。

警示類型

以下是版本分析器報表的警示類型,以及您可以採取的行動:

  • 一律執行工作:一律執行的工作會讓其他工作在所有不必要的建構作業上執行。收到警示的原因主要有兩種:

    • (較常見) 您並未正確宣告工作輸入/輸出內容。如果發生這種情況,請正確宣告工作的輸入和輸出內容。這表示,您可以自行在此宣告輸入及輸出內容,或者如果觸發警示的工作來自第三方外掛程式,則可變更外掛程式版本。

    • (較不常見) 工作會將 upToDateWhen 設為否,因此應該避免使用。可能是因為某些邏輯的值為否,或 upToDateWhen 經過硬式編碼而為否。如果有邏輯判定為否,則這個結果可能是刻意設定,您可以選擇忽略此警示。 如果 upToDateWhen 的硬式編碼設為否,建議您從程式碼中移除硬式編碼。

  • 工作設定問題:相關宣告與輸出相同的目錄的工作會產生此警示。這表示這些工作輸出內容很可能不會保存在版本中,而且即使沒有變更,這些工作仍會一直執行。如要解決這則警示的問題,您必須為工作宣告不同的輸出目錄。這表示可自行在此宣告不同的輸出目錄,或者如果觸發警示的工作來自第三方外掛程式,可變更外掛程式版本。

  • 非增量註解處理工具:這個警示會在註解處理工具為非增量時產生,且會導致 JavaCompile 工作一律以非遞增方式執行。如要解決這項警示,請切換至增量註解處理工具

  • 設定快取:如果專案未啟用設定快取,系統就會顯示這項警示。版本分析器會逐步說明一系列建構作業,以確認您的專案是否與設定快取相容。如果相容性檢查成功,您可以透過版本分析器開啟設定快取。

  • 檢查 Jetifier:如果專案中有 enableJetifier 旗標並啟用,系統就會顯示此警示;也就是說,如果 gradle.properties 檔案中有 android.enableJetifier=true,就會顯示此警示。版本分析器可以執行檢查,確認是否可安全移除旗標,確保您的專案能有更佳的建構效能,並從未維護的 Android 支援資料庫中遷移。