藉助版本分析器排解版本效能的問題

您可以使用版本分析器檢查專案的版本效能。您的版本效能可能會因為幾項因素受到影響,這些因素可能會因不同版本而異。針對您執行的每項版本,版本分析器會嘗試呈現出每個版本最重要的資訊,以便您快速找出並解決版本效能中的迴歸問題。

本資訊頁面提供版本分析器的總覽,並提供如何使用工具提升專案版本效能的指南。如需更多改善版本效能的策略,請參閱將版本速度最佳化一文。

分析器呈現的資料會依每個版本而異。特別是對大型且複雜的版本而言,有許多因素會在版本之間發生改變,因而改變分析器顯示為版本作業期間的重要因素資料。因此,建議您多次建構專案,並比較分析器中的資料來判斷模式。

開始使用

每次建構應用程式時,版本分析器都會建立一份報表,並在「Build」視窗中顯示最新的報吿資料。

如要開始使用,請按照下列指示操作:

  1. 如果尚未建立應用程式,請透過下列其中一種方式建構應用程式:
    • 在選單列中,依序按一下「Build」>「Make Project」
    • 如要建立 Android App Bundle 或 APK,請按一下「Build」>「Build Bundle(s)/APK」>「Build Bundle」或是從選單上選「Build」>「Build Bundle(s)/APK」>「Build APK(s)」
  2. 如要開啟「Build」視窗,請從選單列中依序選取「View」>「Tool Windows」>「Build」
  3. 如要在「Build Analyzer」中查看建構報告,請按一下「Build」視窗中的「Build Analyzer」分頁標籤。

檢視具有會影響版本時間長度的工作的外掛程式

完成建構後初次開啟版本分析器時,該視窗會顯示建構分析的總覽,如圖 1 所示。

圖 1. 版本分析器總覽頁面會顯示發現內容的摘要。

如要查看外掛程式的細目,以及會影響建構時間長度的工作,請按一下總覽頁面上的「Plugins with tasks impacting build duration」。您也可以從下拉式選單中選取「Tasks」,並確認已選取「Group by plugin」

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

工作窗格會顯示影響建構時間長度的工作。所有有問題的問題旁邊都會顯示警告圖示。

圖表會顯示工作對整體建構時間長度的貢獻量。

針對選取的工作,詳細資料窗格會顯示所偵測問題的詳細資訊。

每個節點會顯示節點執行直接子項所需的總時間。這些時間長度有助於讓您加強檢查對建構時間長度影響最大的工作。

決定版本時間長度的工作

如要查看影響版本時間長度的工作細目,請按一下總覽頁面上的「Tasks impacting build duration」。您也可以從下拉式選單中選取「Tasks」,並確認已取消選取「Group by plugin」

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

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

您可能會發現,每個版本在執行時,其版本時間長度是由不同組的工作決定。舉例來說,如果您變更了建構設定、使用不同的工作組合 (例如增量建構) 執行某一版本,或是在不同的限制下執行某個版本,則「Build Speed」視窗可能會針對該版本作業時間長度影響最大的工作,醒目顯示不同組的工作。基於如此的變異情況,您可能需要在多個版本中使用版本速度視窗,以持續縮短版本的時間長度。

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

  • 淺藍色:此工作屬於 Android Gradle 外掛程式、Java Gradle 外掛程式或 Kotlin Gradle 外掛程式。
  • 藍色:此工作屬於第三方或自訂外掛程式,例如使用 Android Studio 建立新專案後套用的外掛程式。
  • 紫色:此工作不屬於外掛程式,但用於在執行階段動態修改專案的屬性。例如,您可能會在 build.gradle 檔案中定義的工作。
  • 灰色:相較於分析器所突顯的其他工作,此工作不會對版本時間長度造成明顯影響。

您可以點選每個子工作以進一步瞭解其執行作業。例如,分析器會提供其他詳細資料,例如父項外掛程式、工作類型、導致這項工作執行的其他工作,以及工作是否會漸進執行,如圖 2 所示。分析器可能也會引發警告,藉此協助您將工作設定為在執行時更有效率。

檢查警告

如果版本分析器偵測到某些工作可以設定為更有效率地執行,則會發出警告。

舉例來說,如果工作並未使用適當的 Gradle API 來指定其輸入和輸出,就無法得到累加建構作業的好處。如果您的版本包含這類工作,版本分析器可能會以「Always-run」的警示來標記這些工作,因為無論輸入內容如何改變,每個版本都會執行這些工作。

如要查看分析器針對該版本所提出的所有警告,請按一下總覽頁面上的「All warnings」,或在下拉式選單中選取「Warnings」。「Warnings」檢視畫面會依類別分組顯示警告。例如,「Always-run」節點會將分析器認為累加版本未正確設定的工作分為同一組。

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

圖 4. 版本分析器警示的詳細資訊。

當您按一下「Generate report」連結時,會顯示一個含有其他資訊的對話方塊,可協助外掛程式開發人員在新版外掛程式中將問題解決。按一下「Copy」將文字儲存至剪貼簿,方便您將資訊貼到提供給外掛程式開發人員的錯誤報告中。

警示類型

版本分析器會回報下列警告類型:

  • 一律執行工作:一律執行的工作會讓其他工作在每個版本中執行,這是不必要的。收到這種警示的主要原因有二:

    • (較常見) 您未正確宣告工作的輸入/輸出。如果是這種情形,請正確宣告工作的輸入和輸出。這表示,您可以自行在此宣告輸入及輸出,或者如果警示是因為第三方外掛程式的工作所引起,則請變更外掛程式版本。

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

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

  • 非累加性的註解處理工具:這個警示會在註解處理工具屬於非累加、且會導致 JavaCompile 工作一律以非累加的方式執行時產生。如要解決這項警示,請切換至累加式註解處理工具

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

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

檢查下載作業的影響

版本分析器會提供下載依附元件的耗費時間摘要,以及每個存放區的下載作業詳細檢視畫面。如要查看下載作業的影響,請從下拉式選單中選取「Downloads」

您可以根據這項資訊,判斷非預期的依附元件下載作業是否會對建構效能造成負面影響。在漸進式建構作業中,這項資訊特別重要,因為不應一致性地下載所有構件。

具體來說,您可以利用這項資訊找出設定問題,例如使用會造成非預期下載作業的依附元件動態版本。此外,如果您發現特定存放區有大量失敗的要求,可能表示應該把該存放區從存放區設定中移除,或移到較低位置。

圖 5. 版本分析器會顯示下載作業對建構時間長度的影響。