Android build 性能

报告问题 查看来源 每晚 · 7.4。 ,了解所有最新动态。 7.3 · 7.2 · 7.1 · 7.0 · 6.5

本页介绍了如何针对 Android 优化 build 性能 。如需了解使用 Bazel 进行常规构建性能优化,请参阅优化性能

这些标志位于 bazelrc 配置语法,因此 它们可以直接粘贴到 bazelrc 文件中,并使用 --config=<configuration_name>

性能分析

默认情况下,Bazel 会将 JSON 跟踪配置文件写入名为 command.profile.gz。 如需查看以下内容,请参阅 JSON 配置文件文档: 如何读取配置文件并与之互动。

用于 Android 构建操作的永久性工作器

部分 Android 构建操作支持 永久性工作器

这些操作的助记符包括:

  • DexBuilder
  • Javac
  • 脱糖
  • AaptPackage
  • AndroidResourceParser
  • AndroidResourceValidator
  • AndroidResourceCompiler
  • RClassGenerator
  • AndroidResourceLink
  • AndroidAapt2
  • AndroidAssetMerger
  • AndroidResourceMerger
  • AndroidCompiledResourceMerger

启用 worker 可以通过节省 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 标记或在以下位置的 aapt_version 上设置 aapt2android_binaryandroid_local_test

SSD 优化

--experimental_multi_threaded_digest 标志对于优化 SSD 上的摘要计算非常有用。