本页介绍了如何针对 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 来提升构建性能 因为调用以上每种工具都会耗费 80% 的初创公司成本, 通过持久保留它们来对系统的内存用量
如需为工作器启用这些操作,请将这些标志与
--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_aapt=aapt2
标记,或在 aapt_version
上设置 aapt2
,
android_binary
和 android_local_test
。
SSD 优化
--experimental_multi_threaded_digest
标志有助于优化摘要
计算。