Cómo solucionar problemas de rendimiento de compilación con Build Analyzer

Usa Build Analyzer para inspeccionar el rendimiento de la compilación de tu proyecto. En cada compilación que realizas, Build Analyzer intenta presentar la información más importante para que puedas identificar y resolver rápidamente las regresiones de rendimiento de tu compilación.

Si quieres ver estrategias adicionales para mejorar el rendimiento de la compilación, consulta Cómo optimizar tu velocidad de compilación.

Comenzar

Cada vez que compilas tu app, Build Analyzer crea un informe y muestra los datos del último informe en la ventana Build.

Para comenzar, haz lo siguiente:

  1. Si aún no lo hiciste, compila tu app de una de las siguientes maneras:
    • Haz clic en Build > Make Project en la barra de menú.
    • Para compilar un Android App Bundle o APK, haz clic en Build > Build Bundle(s)/APK(s) > Build Bundle(s) o Build > Build Bundle(s)/APK(s) > Build APK(s) en la barra de menú.
  2. Para abrir la ventana Build, selecciona View > Tool Windows > Build en la barra de menú.
  3. Para ver el informe de compilación en Build Analyzer, haz clic en la pestaña Build Analyzer de la ventana Build.

Los datos que presenta Build Analyzer pueden cambiar entre las compilaciones, por lo que es útil compilar tu proyecto varias veces y comparar los datos para identificar patrones.

Cómo ver complementos con tareas que determinan la duración de la compilación

Cuando abres Build Analyzer por primera vez después de completar una compilación, la ventana muestra una descripción general del análisis de compilación, como se muestra en la figura 1.

Figura 1: La página de descripción general de Build Analyzer proporciona un resumen de los resultados.

Para ver un desglose de los complementos con tareas que determinan la duración de la compilación, haz clic en Plugins with tasks impacting build duration en la página de descripción general. También puedes seleccionar Tareas en el menú desplegable y confirmar que estás agrupando por complemento. El gráfico ordena los complementos y las tareas relacionadas por el tiempo total que tardan en completarse.

Figura 2: Build Analyzer proporciona un desglose de los complementos que afectan la duración de la compilación.

Cómo ver tareas que determinan la duración de la compilación

Para ver un desglose de las tareas que contribuyen a la duración de tu compilación, haz clic en Tasks impacting build duration en la página de descripción general o selecciona Tareas en el menú desplegable. Si tu proyecto usa AGP 8.0 o versiones posteriores, las tareas se agrupan por categoría de forma predeterminada, por lo que es más fácil identificar las áreas que afectan la duración de la compilación. Haz clic en cada tarea secundaria para obtener más información sobre su ejecución.

Figura 3: Build Analyzer proporciona un desglose de las tareas más responsables de la duración de la compilación.

Cómo inspeccionar las advertencias

Si Build Analyzer detecta que algunas tareas pueden configurarse para ejecutarse de manera más eficiente, proporciona una advertencia. Si deseas ver todas las advertencias que Build Analyzer identificó para tu compilación, haz clic en AllWarnings en la página de descripción general o selecciona Warnings en el menú desplegable.

Algunas advertencias tienen un vínculo Generate report, como se muestra en la Figura 4. Cuando haces clic en el vínculo Generate report, aparecerá un diálogo con información adicional que podría ayudar al desarrollador del complemento a resolver el problema en una versión nueva del complemento. Haz clic en Copy para guardar el texto en el portapapeles y pegar más fácilmente la información en un informe de errores para el desarrollador del complemento.

Figura 4: Información detallada sobre las advertencias de Build Analyzer.

Tipos de advertencia

Build Analyzer informa los siguientes tipos de advertencia:

  • Tareas de ejecución constante: Una tarea de ejecución constante hace que otras tareas se ejecuten en cada compilación, lo cual no es necesario. Hay dos razones principales por las que podrías ver esta advertencia:

    • (Más común) No declaraste correctamente las entradas o salidas de las tareas. Si este es el caso, debes declarar de manera correcta las entradas y salidas para tus tareas. Esto significa que puedes declarar las entradas y salidas donde puedas, o bien cambiar las versiones de los complementos si las tareas que activan la advertencia provienen de complementos de terceros.

    • (Menos común) Una tarea tiene el valor upToDateWhen establecido en falso, lo que debe evitarse. Podría suceder que parte de la lógica se evalúe como falsa o que upToDateWhen esté codificado para que sea falso. Si hay lógica que se evalúa como falsa, este resultado puede ser intencional y puedes ignorar la advertencia. Si se codifica upToDateWhen como falso, debes quitar la codificación del código.

  • Problemas de configuración de tareas: Esta advertencia se genera para tareas que declaran el mismo directorio que las salidas. Esto significa que es probable que las salidas de esas tareas no se conserven entre compilaciones y que esas tareas siempre se ejecuten, incluso cuando no haya cambios. A fin de resolver esta advertencia, debes declarar diferentes directorios de salida para tus tareas. Eso implica declarar por tu cuenta los directorios de salida diferentes donde puedas, o bien cambiar las versiones de los complementos si las tareas que activan la advertencia provienen de complementos de terceros.

  • Procesador de anotaciones no incremental: Esta advertencia se genera en situaciones en las que un procesador de anotaciones no es incremental y hace que la tarea JavaCompile siempre se ejecute de manera no incremental. Para solucionar esta advertencia, cambia a un procesador de anotaciones incremental.

  • Caché de configuración: Esta advertencia se presenta si el almacenamiento en caché de configuración no está habilitado en tu proyecto. Build Analyzer recorre una secuencia de compilaciones para verificar si tu proyecto es compatible con el almacenamiento en caché de configuración. Si las verificaciones de compatibilidad se realizan de forma correcta, puedes activar el almacenamiento en caché de configuración desde Build Analyzer.

  • Verifica Jetifier: Esta advertencia aparece si la marca enableJetifier está presente y habilitada en el proyecto, es decir, si tienes android.enableJetifier=true en tu archivo gradle.properties. Build Analyzer puede realizar una verificación para ver si la marca se puede quitar de manera segura a fin de permitir que tu proyecto tenga un mejor rendimiento de compilación y migre fuera de las bibliotecas de compatibilidad de Android desactualizadas.

Cómo ver el impacto de la descarga

Build Analyzer proporciona un resumen del tiempo dedicado a descargar dependencias y una vista detallada de descargas por repositorio. Para verificar el impacto de las descargas, selecciona Descargas en el menú desplegable. Esta información también está disponible en la ventana Sincronizar.

Puedes usar esta información para determinar si las descargas de dependencias inesperadas afectan el rendimiento de tu compilación. Esto es especialmente importante durante las compilaciones incrementales, que no deberían descargar artefactos de manera coherente.

En particular, puedes usar esta información para identificar problemas de configuración, como el uso de versiones dinámicas de dependencias que causan descargas inesperadas. Además, una gran cantidad de solicitudes fallidas para un repositorio específico podría indicar que el repositorio se debe quitar o mover a una posición inferior en la configuración.

Figura 5: Build Analyzer muestra el impacto de las descargas en la duración de la compilación.

[Solo para Windows] Comprueba el impacto del software antivirus

Build Analyzer te informa si el software antivirus puede afectar el rendimiento de tu compilación. Esto puede suceder si un software antivirus, como Windows Defender, realiza un análisis en tiempo real de los directorios que usa Gradle. Build Analyzer recomienda una lista de directorios para excluir del análisis activo y, si es posible, ofrece un vínculo para agregarlos a la lista de exclusión de carpetas de Windows Defender.