Esta página contém informações sobre como otimizar o desempenho de build para apps Android especificamente. Para otimização geral do desempenho do build com o Bazel, consulte Otimização de desempenho.
Sinalizações recomendadas
As flags estão na
sintaxe de configuração bazelrc
, então
podem ser coladas diretamente em um arquivo bazelrc
e invocadas com
--config=<configuration_name>
na linha de comando.
Criação de perfil de performance
Por padrão, o Bazel grava um perfil de rastreamento JSON em um arquivo chamado
command.profile.gz
na base de saída do Bazel.
Consulte a documentação do perfil JSON para saber como ler e interagir com o perfil.
Workers persistentes para ações de build do Android.
Um subconjunto de ações de build do Android tem suporte para workers persistentes.
Os mnemônicos dessas ações são:
- DexBuilder
- Javac
- Desugar
- AaptPackage
- AndroidResourceParser
- AndroidResourceValidator
- AndroidResourceCompiler
- RClassGenerator
- AndroidResourceLink
- AndroidAapt2
- AndroidAssetMerger
- AndroidResourceMerger
- AndroidCompiledResourceMerger
A ativação de workers pode resultar em uma melhor performance de build, economizando nos custos de inicialização da JVM ao invocar cada uma dessas ferramentas, mas ao custo de maior uso de memória no sistema ao persistir.
Para ativar os workers para essas ações, aplique estas flags com
--config=android_workers
na linha de comando:
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
O número padrão de workers persistentes criados por ação é 4
. Medimos a melhoria no desempenho do build ao limitar o número de instâncias para cada ação a 1
ou 2
, embora isso possa variar dependendo do sistema em que o Bazel está sendo executado e do projeto que está sendo criado.
Para limitar o número de instâncias de uma ação, aplique estas flags:
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.
Como usar o AAPT2
O aapt2
tem um desempenho melhor que o aapt
e também cria APKs menores. Para usar aapt2
, use a
sinalização --android_aapt=aapt2
ou defina aapt2
no aapt_version
em
android_binary
e android_local_test
.
Otimizações de SSD
A flag --experimental_multi_threaded_digest
é útil para otimizar o cálculo de resumo em SSDs.