Optimiza los paquetes especificados con packageScope (experimental)

Puedes optimizar paquetes específicos con R8 y packageScope. Esto se diseñó como un primer paso opcional para las apps que aún no usan R8 y no se recomienda para las apps que ya lo usan.

Considera si debes usar packageScope

Si tu app ya usa R8, no uses packageScope, ya que es una configuración poco óptima en términos de rendimiento y tamaño de la app. En su lugar, mejora la configuración de R8 de tu app con reglas de conservación mejoradas o, si usas el modo de compatibilidad, migra al modo completo de R8.

Las apps que aún no usan R8, pero que lo están adoptando, pueden usar packageScope para administrar la transición de forma incremental. Dado que R8 aplica optimizaciones potentes que pueden alterar el comportamiento de la app, limitar estas optimizaciones a paquetes específicos que son seguros para optimizar, como AndroidX y Kotlin, te permite obtener ganancias de rendimiento con un riesgo mínimo. Una vez que tu app sea estable, podrás expandir gradualmente estas optimizaciones al resto de tu base de código y dependencias, y probar la estabilidad en cada etapa.

Requisitos previos

Para usar R8 con packageScope, se requiere lo siguiente:

  • Complemento de Android para Gradle 9.0 o versiones posteriores
  • R8 en modo completo, no en modo de compatibilidad

Configura la optimización

Para habilitar la optimización con packageScope, completa los siguientes pasos.

Elige las bibliotecas que deseas optimizar

Identifica las bibliotecas que deseas optimizar. Te recomendamos que comiences con las bibliotecas de AndroidX y Kotlin androidx.**, kotlin.** y kotlinx.**, ya que son bibliotecas estables que se configuraron para la compatibilidad con R8.

Habilita la compatibilidad para usar R8 con packageScope

Agrega lo siguiente al archivo gradle.properties de tu proyecto:

android.r8.gradual.support=true

Configura el bloque de optimización

En el archivo build.gradle.kts (o build.gradle) a nivel del módulo, agrega un optimization bloque a la configuración de compilación de lanzamiento. Dentro de este bloque, usa packageScope para crear una lista de los paquetes específicos que deseas optimizar. En el archivo build.gradle.kts, une tu lista de paquetes en setOf().

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

Groovy

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

Prueba la optimización

Después de aplicar o actualizar la declaración packageScope, prueba tu app de forma exhaustiva para verificar que no se hayan producido fallas inesperadas ni cambios de comportamiento.

Transición de la optimización de paquetes especificados a la optimización de toda la app

Para maximizar los beneficios de la optimización, debes intentar realizar una transición gradual del uso de packageScope al uso de R8 en toda la app. Este proceso implica expandir de forma incremental la cobertura de optimización:

  1. Comienza con bibliotecas estables. Para comenzar, incluye solo bibliotecas estables y de uso general que sean compatibles con las optimizaciones de R8 en la lista packageScope. Comienza con las bibliotecas de AndroidX y Kotlin androidx.**, kotlin.** y kotlinx.**.
  2. Agrega paquetes de forma incremental. Agrega gradualmente prefijos de paquetes nuevos a packageScope:
    1. Evalúa las dependencias. Revisa las bibliotecas de tu app. Entre los candidatos adecuados para agregar a la lista packageScope, se incluyen las bibliotecas oficiales de Google (por ejemplo, com.google.**) y otras bibliotecas sólidas como OkHttp (por ejemplo, okhttp3.** y okio.**). Prioriza las bibliotecas que no impliquen una gran reflexión, serialización o llamadas de código nativo (JNI).
    2. Prioriza en función del tamaño del paquete. Usa el Analizador de APK de Android Studio para identificar los mayores contribuyentes al tamaño de tu app.
      1. Compila un AAB o APK de lanzamiento con R8 desactivado.
      2. Ábrelo en el Analizador y examina los archivos dex.
      3. Ordena los paquetes por tamaño. Los paquetes más grandes ofrecen el mayor retorno de la inversión (ROI) para la optimización. Si te enfocas en ellos primero, obtendrás la reducción de tamaño más significativa al principio del proceso, siempre y cuando estas bibliotecas no tengan reglas de conservación demasiado amplias. Consulta Elige las bibliotecas con prudencia para obtener más información.
  3. Verifica los cambios de comportamiento. Después de agregar cada prefijo de paquete nuevo, realiza pruebas integrales para detectar y resolver cualquier regresión o comportamiento inesperado.
  4. Agrega paquetes de aplicaciones al final. Si los paquetes de tu app no usan mucha reflexión, inclúyelos en packageScope y agrega reglas de conservación de forma incremental según sea necesario. Si los paquetes de tu app usan mucha reflexión, inclúyelos en packageScope y agrega reglas de conservación en todo el paquete para los paquetes requeridos. Itera sobre las reglas de conservación para refinarlas.
  5. Comienza a usar R8 en toda la app. Una vez que la mayoría de las dependencias de tu app se incluyan en la declaración packageScope y la app sea estable, quita packageScope para optimizar toda la app en modo completo.