Desempenho do build do Android

Esta página contém informações sobre como otimizar a performance de builds para apps Android. Para otimização geral da performance de builds com o Bazel, consulte Otimização da performance.

As sinalizações estão na bazelrc sintaxe de configuração, então podem ser coladas diretamente em um arquivo bazelrc e invocadas com --config=<configuration_name> na linha de comando.

Performance de criação de perfil

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 a 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, mantendo-as.

Para ativar workers para essas ações, aplique estas sinalizações 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 uma performance de build aprimorada limitando 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 sinalizações:

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

aapt2 tem performance melhorada em relação ao aapt e também cria APKs menores. Para usar aapt2, use a --android_aapt=aapt2 sinalização ou defina aapt2 em aapt_version em android_binary e android_local_test.

Otimizações de SSD

A sinalização --experimental_multi_threaded_digest é útil para otimizar a computação de resumo em SSDs.