Android Build 效能

回報問題 查看原始碼

本頁提供 Android 應用程式最佳化建構效能的相關資訊。如需 Bazel 的一般建構效能最佳化,請參閱最佳化效能一文。

這些標記位於 bazelrc 設定語法中,因此能直接貼到 bazelrc 檔案中,並透過指令列使用 --config=<configuration_name> 叫用。

剖析效能

根據預設,Bazel 會將 JSON 追蹤記錄設定檔寫入 Bazel 的輸出基礎中,名稱為 command.profile.gz 的檔案。請參閱 JSON 個人資料說明文件,瞭解如何讀取及與設定檔互動。

Android 建構動作的永久工作站

部分 Android 建構動作支援永久工作站

這些動作的記憶法如下:

  • DexBuilder
  • JavaC
  • 糖分
  • AaptPackage
  • Android 資源剖析器
  • Android 資源驗證工具
  • Android 資源編譯器
  • RClass 產生器
  • Android 資源連結
  • AndroidAapt2
  • AndroidAssetMerger
  • Android 資源合併工具
  • AndroidCompiledResourceMerger

啟用工作站後,啟用各項工具可節省 JVM 啟動成本,進而改善建構效能,但同時保留系統的記憶體用量,以降低系統的記憶體用量。

如要啟用工作站的這些動作,請在指令列中使用 --config=android_workers 來套用這些標記:

build:android_workers --strategy=DexBuilder=worker
build:android_workers --strategy=Javac=worker
build:android_workers --strategy=Desugar=worker

# A wrapper flag for these resource processing actions:
# - AndroidResourceParser
# - AndroidResourceValidator
# - AndroidResourceCompiler
# - RClassGenerator
# - AndroidResourceLink
# - AndroidAapt2
# - AndroidAssetMerger
# - AndroidResourceMerger
# - AndroidCompiledResourceMerger
build:android_workers --persistent_android_resource_processor

每個動作建立的持續性工作站預設數量為 4 個。儘管每個動作的執行個體數量限制為 12,但已衡量改善的建構效能,但這可能會因 Bazel 執行的系統和正在建構的專案而異。

如要限制特定動作的執行個體數量,請套用下列標記:

build:android_workers --worker_max_instances=DexBuilder=2
build:android_workers --worker_max_instances=Javac=2
build:android_workers --worker_max_instances=Desugar=2
build:android_workers --worker_max_instances=AaptPackage=2
# .. and so on for each action you're interested in.

使用 AAPT2

aapt2 的效能比 aapt 更佳,並且建立較小的 APK。如要使用 aapt2,請使用 --android_aapt=aapt2 標記,或是在 android_binaryandroid_local_testaapt_version 上設定 aapt2

SSD 最佳化

--experimental_multi_threaded_digest 標記對於最佳化 SSD 的摘要運算來說非常實用。