Desempenho do build do Android

Reportar um problema Ver código-fonte Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

Criação de perfil de desempenho

O Bazel grava um perfil de rastreamento JSON por padrão 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.

As mnemônicas dessas ações são:

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

Ativar workers pode resultar em uma melhor performance do build, economizando nos custos de inicialização da JVM ao invocar cada uma dessas ferramentas, mas com o custo de aumentar o uso de memória no sistema ao persisti-las.

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 limitando o número de instâncias de 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 melhorou o desempenho em relação ao aapt e também cria APKs menores. Para usar aapt2, use a flag --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.