本頁會特別說明如何針對 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 啟動成本,藉此提升建構效能;不過,保留工作站之後,系統上的記憶體用量也會增加。
如要為這些動作啟用工作站,請在指令列中使用 --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
個。我們將每個動作的執行個體數量限制為 1
或 2
,衡量了改善建構效能,不過這可能會因執行 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_binary
和 android_local_test
上的 aapt_version
上使用 --android_aapt=aapt2
標記或設定 aapt2
。
SSD 最佳化
--experimental_multi_threaded_digest
旗標適用於最佳化 SSD 的摘要運算。