En esta página, se incluye información para optimizar el rendimiento de la compilación de apps para Android. Para obtener una optimización general del rendimiento de compilación con Bazel, consulta Cómo optimizar el rendimiento.
Marcas recomendadas
Las marcas están en la sintaxis de configuración de bazelrc
, por lo que se pueden pegar directamente en un archivo bazelrc
y, luego, 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 JSON para saber cómo leer y cómo interactuar con el perfil.
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 los trabajadores puede mejorar el rendimiento de la compilación, ya que ahorra en los costos de inicio de JVM por invocar cada una de estas herramientas, pero a costa de aumentar el 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 que se crean por acción es 4
. Medimos el rendimiento mejorado de la compilación limitando la cantidad de instancias de 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
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 procesamiento de resúmenes en SSD.