本页专门介绍了如何针对 Android 应用优化 build 性能。如需使用 Bazel 进行常规构建性能优化,请参阅优化性能。
推荐标志
这些标志采用 bazelrc
配置语法,因此可以直接粘贴到 bazelrc
文件中,并在命令行中使用 --config=<configuration_name>
进行调用。
性能分析
默认情况下,Bazel 会将 JSON 跟踪记录配置文件写入 Bazel 输出基中名为 command.profile.gz
的文件。如需了解如何读取配置文件以及如何与配置文件进行交互,请参阅 JSON 配置文件文档。
用于 Android 构建操作的永久性工作器。
一部分 Android 构建操作支持持久性工作器。
这些操作的助记符包括:
- DexBuilder
- JavaC
- 脱糖
- AaptPackage
- AndroidResourceParser
- Android 资源验证器
- Android 资源编译器
- RClassGenerator
- 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
。我们通过将每个操作的实例数限制为 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
与 aapt
相比,aapt2
提升了性能,也创建了较小的 APK。如需使用 aapt2
,请使用 --android_aapt=aapt2
标志或在 android_binary
和 android_local_test
上的 aapt_version
上设置 aapt2
。
SSD 优化
--experimental_multi_threaded_digest
标志有助于优化 SSD 上的摘要计算。