Android 建構效能

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

標記使用 bazelrc 設定語法,因此可以直接貼到 bazelrc 檔案中,然後使用指令列的 --config=<configuration_name> 叫用。

剖析效能

Bazel 預設會將 JSON 追蹤記錄設定檔寫入 Bazel 輸出基底中名為 command.profile.gz 的檔案。如要瞭解如何讀取設定檔並與設定檔互動,請參閱 JSON 設定檔說明文件

Android 建構動作的永久工作站

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

這些操作的記憶功能包括:

  • DexBuilder
  • JavaC
  • 脫糖
  • AaptPackage
  • AndroidResourceParser
  • AndroidResourceValidator
  • AndroidResourceCompiler
  • RClassGenerator
  • AndroidResourceLink
  • AndroidAapt2
  • AndroidAssetMerger
  • AndroidResourceMerger
  • AndroidCompiledResourceMerger

啟用工作站可以降低 JVM 啟動成本,藉此降低叫用各項工具的 JVM 啟動成本,但保留工作站會增加系統的記憶體用量。

如要為這些動作啟用 worker,請在指令列中使用 --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

aapt2aapt 提升了效能,並建立較小的 APK。如要使用 aapt2,請使用 --android_aapt=aapt2 標記,或在 aapt_versionandroid_binaryandroid_local_test 設定 aapt2

SSD 最佳化

--experimental_multi_threaded_digest 旗標適合用於最佳化 SSD 的摘要運算。