Rendimiento de la compilación de Android

Informar un problema Ver fuente Noche}

Esta página contiene información sobre cómo optimizar el rendimiento de compilación para apps para Android específicamente. Para optimizar el rendimiento de compilación general con Bazel, consulta Cómo optimizar el rendimiento.

Las marcas se encuentran en la sintaxis de configuración de bazelrc, por lo que se pueden pegar directamente en un archivo bazelrc y se pueden invocar con --config=<configuration_name> en la línea de comandos.

Rendimiento de la generación de perfiles

Bazel escribe un perfil de seguimiento JSON de forma predeterminada en un archivo llamado command.profile.gz en la base de salida de Bazel. Consulta la documentación del perfil de JSON para obtener información sobre cómo leer el perfil y cómo interactuar con él.

Trabajadores persistentes para acciones de compilación de Android.

Un subconjunto de acciones de compilación de Android es compatible con los trabajadores persistentes.

Los mnemónicos de estas acciones son los siguientes:

  • DexBuilder
  • Java
  • Expansión de sintaxis
  • AaptPackage
  • AndroidResourceParser
  • AndroidResourceValidator
  • AndroidResourceCompiler
  • RClassGenerator
  • AndroidResourceLink
  • AndroidAapt2
  • AndroidAssetMerger
  • AndroidResourceMerger
  • AndroidCompiledResourceMerger

Habilitar trabajadores puede mejorar el rendimiento de la compilación, ya que se ahorran costos de inicio de JVM por la invocación de cada una de estas herramientas, pero a costa de un mayor uso de la memoria en el sistema mediante la persistencia.

Si quieres habilitar trabajadores para estas acciones, aplica estas marcas con --config=android_workers en la línea de comandos:

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

La cantidad predeterminada de trabajadores persistentes creados por acción es 4. Medimos el rendimiento mejorado de la compilación mediante la limitación de la cantidad de instancias para cada acción a 1 o 2, aunque esto puede variar según el sistema en el que se ejecuta Bazel y el proyecto que se compila.

Para limitar el número de instancias de una acción, aplica estas marcas:

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.

Cómo usar AAPT2

aapt2 mejoró el rendimiento en comparación con aapt y también crea APK más pequeños. Para usar aapt2, usa la marca --android_aapt=aapt2 o configura aapt2 en aapt_version en android_binary y android_local_test.

Optimizaciones de SSD

La marca --experimental_multi_threaded_digest es útil para optimizar el procesamiento de resumen en SSD.