Android build 性能

报告问题 查看来源 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

本页包含有关专门针对 Android 应用优化 build 性能的信息。如需了解如何使用 Bazel 优化常规构建性能,请参阅优化性能

这些标志采用 bazelrc 配置语法,因此可以直接粘贴到 bazelrc 文件中,并在命令行中使用 --config=<configuration_name> 调用。

分析性能

默认情况下,Bazel 会将 JSON 跟踪配置文件写入 Bazel 输出库中的 command.profile.gz 文件。如需了解如何读取和互动个人资料,请参阅 JSON 个人资料文档

Android build 操作的持久工作器

部分 Android build 操作支持持久 worker

这些操作的助记符如下:

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

启用工作器可以节省调用每个工具的 JVM 启动费用,从而提高 build 性能,但会因持久保留这些工具而增加系统上的内存用量。

如需为这些操作启用工作器,请在命令行中使用 --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_test 上将 aapt_version 中的 aapt2 设置为启用。

SSD 优化

--experimental_multi_threaded_digest 标志有助于优化 SSD 上的摘要计算。