Habilita la optimización de la app

Para brindar la mejor experiencia del usuario, debes optimizar tu app para que sea lo más pequeña y rápida posible. Nuestro optimizador de apps, llamado R8, optimiza tu app quitando el código y los recursos que no se usan, reescribiendo el código para optimizar el rendimiento del tiempo de ejecución y mucho más. Para tus usuarios, esto significa lo siguiente:

  • Iniciar la app más rápido
  • Mejoras en el rendimiento del tiempo de ejecución y la renderización
  • Menos errores de ANR

Para habilitar la optimización de la app, establece isMinifyEnabled = true (para la optimización del código) y isShrinkResources = true (para la optimización de recursos) en la secuencia de comandos de compilación de nivel de la app de tu compilación de lanzamiento, como se muestra en el siguiente código. Te recomendamos que siempre habilites ambos parámetros de configuración. También recomendamos habilitar la optimización de la app solo en la versión final que pruebes antes de publicarla (por lo general, la compilación de lanzamiento), ya que las optimizaciones aumentan el tiempo de compilación del proyecto y pueden dificultar la depuración debido a la forma en que modifican el código.

Kotlin

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            isMinifyEnabled = true

            // Enables resource shrinking.
            isShrinkResources = true

            proguardFiles(
                // Default file with automatically generated optimization rules.
                getDefaultProguardFile("proguard-android-optimize.txt"),

                ...
            )
            ...
        }
    }
    ...
}

Groovy

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            minifyEnabled true

            // Enables resource shrinking.
            shrinkResources true

            // Default file with automatically generated optimization rules.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')

            ...
        }
    }
}

Optimiza la reducción de recursos para que las apps sean aún más pequeñas

La versión 8.12.0 del complemento de Gradle para Android (AGP) introduce la reducción optimizada de recursos, cuyo objetivo es integrar la optimización de recursos y código para crear apps aún más pequeñas y rápidas.

Habilita la reducción de recursos optimizada

Para activar la nueva canalización optimizada de reducción de recursos para una versión de AGP anterior a la 9.0.0, agrega lo siguiente al archivo gradle.properties de tu proyecto:

android.r8.optimizedResourceShrinking=true

Si usas AGP 9.0.0 o una versión posterior, no necesitas configurar android.r8.optimizedResourceShrinking=true. La reducción de recursos optimizada se aplica automáticamente cuando isShrinkResources = true está habilitado en la configuración de compilación.

Verifica y configura los parámetros de configuración de optimización de R8

Para habilitar R8 para que use sus capacidades de optimización completas, quita la siguiente línea del archivo gradle.properties de tu proyecto, si existe:

android.enableR8.fullMode=false # Remove this line from your codebase.

Ten en cuenta que habilitar la optimización de la app dificulta la comprensión de los seguimientos de pila, en especial si R8 cambia los nombres de las clases o los métodos. Para obtener seguimientos de pila que correspondan correctamente a tu código fuente, consulta Cómo recuperar el seguimiento de pila original.

Si R8 está habilitado, también debes crear perfiles de inicio para obtener un rendimiento de inicio aún mejor.

Si habilitas la optimización de apps y esta causa errores, aquí tienes algunas estrategias para corregirlos:

Si te interesa optimizar la velocidad de compilación, consulta Cómo configurar la ejecución de R8 para obtener información sobre cómo configurar R8 según tu entorno.

Cambios en el comportamiento de las versiones de AGP y R8

En la siguiente tabla, se describen las funciones clave que se introdujeron en varias versiones del complemento de Android para Gradle (AGP) y el compilador R8.

Versión de AGP Funciones presentadas
9.0 Reducción de recursos optimizada: Está habilitada de forma predeterminada (se controla con android.r8.optimizedResourceShrinking). La reducción de recursos optimizada ayuda a integrar la reducción de recursos con la canalización de optimización de código, lo que genera apps más pequeñas y rápidas. Al optimizar las referencias de código y recursos de forma simultánea, identifica y quita los recursos a los que se hace referencia exclusivamente desde el código sin usar. Esto representa una mejora significativa con respecto a los procesos de optimización separados anteriores.

Esto es especialmente útil para las apps que comparten recursos y código importantes en diferentes verticales de factores de forma, con mejoras medidas de más del 50% en el tamaño de la app. La reducción de tamaño resultante genera descargas más pequeñas, instalaciones más rápidas y una mejor experiencia del usuario con un inicio más rápido, una renderización mejorada y menos errores de ANR.

Filtrado de reglas de biblioteca: Se quitó la compatibilidad con opciones globales (por ejemplo, -dontobfuscate) en las reglas de consumidor de la biblioteca, y las apps las filtrarán. Para obtener más información, consulta Cómo agregar opciones globales.

Verificaciones de nulos de Kotlin: Se optimizan de forma predeterminada (se controlan con -processkotlinnullchecks). Esta versión también introdujo mejoras significativas en la velocidad de compilación. Para obtener más información, consulta Opciones globales para una optimización adicional.

Optimiza paquetes específicos: Puedes usar packageScope para optimizar paquetes específicos. Esta función se encuentra en fase experimental. Para obtener más información, consulta Cómo optimizar paquetes especificados con packageScope.

Optimizado de forma predeterminada: Se quitó la compatibilidad con getDefaultProguardFile("proguard-android.txt"), ya que incluye -dontoptimize, que se debe evitar. En su lugar, usa "proguard-android-optimize.txt". Si necesitas inhabilitar la optimización de forma global en tu app, agrega la marca manualmente a un archivo de ProGuard.
8.12 Reducción de recursos: Se agregó compatibilidad inicial (desactivada de forma predeterminada). Habilita el uso de isShrinkResources). La reducción de recursos funciona en conjunto con R8 para identificar y quitar los recursos sin usar de manera eficaz.

Retrazado de Logcat: Compatibilidad con el retrazado automático en la ventana de Logcat de Android Studio
8.6 Mejora del seguimiento inverso: Incluye el seguimiento inverso del nombre de archivo y el número de línea de forma predeterminada para todos los niveles de minSdk (anteriormente, se requería minSdk 26 o superior en la versión 8.2).

La actualización de R8 ayuda a garantizar que los seguimientos de pila de las compilaciones ofuscadas sean fáciles de leer. Esta versión mejora la forma en que se asignan los números de línea y los archivos fuente, lo que facilita que herramientas como Logcat de Android Studio vuelvan a rastrear automáticamente las fallas hasta el código fuente original.
8.0 Modo completo predeterminado: El modo completo de R8 proporciona una optimización mucho más potente. Se activa de manera predeterminada. Puedes inhabilitar la función con android.enableR8.fullMode=false.
7.0 Modo completo disponible: Se introdujo como una función opcional con android.enableR8.fullMode=true. El modo completo aplica optimizaciones más potentes, ya que realiza suposiciones más estrictas sobre cómo tu código usa la reflexión y otras funciones dinámicas. Si bien reduce el tamaño de la app y mejora el rendimiento, es posible que requiera reglas de conservación adicionales para evitar que se quite el código necesario.