Rendimiento de la compilación de Android

Informar un problema Ver fuente Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

En esta página, se incluye información para optimizar el rendimiento de la compilación específicamente para apps para Android. Para obtener información general sobre la optimización del rendimiento de la compilación con Bazel, consulta Optimizing Performance.

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.

Generación de perfiles de rendimiento

De forma predeterminada, Bazel escribe un perfil de seguimiento JSON en un archivo llamado command.profile.gz en la base de salida de Bazel. Consulta la documentación del perfil 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 admite trabajadores persistentes.

Las mnemónicas de estas acciones son las siguientes:

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

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

Para habilitar los 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 un mejor rendimiento de la compilación limitando la cantidad de instancias para cada acción a 1 o 2, aunque esto puede variar según el sistema en el que se ejecute Bazel y el proyecto que se compile.

Para limitar la cantidad de instancias de una acción, aplica estos parámetros:

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 tiene un mejor rendimiento que aapt y también crea APKs más pequeños. Para usar aapt2, usa la marca --android_aapt=aapt2 o establece 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 cálculo del resumen en SSDs.