Optimiza los paquetes especificados con packageScope (experimental)

Puedes optimizar paquetes específicos con R8 y packageScope. Este paso opcional está diseñado para las apps que aún no usan R8 y no se recomienda para las que ya lo usan.

Considera si usar packageScope

Si tu app ya usa R8, no uses packageScope, ya que es una configuración subó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.

En el caso de las apps que aún no usan R8, pero que lo están adoptando, usa 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 mejoras en el rendimiento con un riesgo mínimo. Una vez que tu app sea estable, puedes 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 el complemento de Android para Gradle 9.0 o una versión posterior.

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 se optimizarán. Recomendamos comenzar con las bibliotecas de AndroidX y Kotlin androidx.**, kotlin.** y kotlinx.** porque 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 bloque optimization a la configuración de compilación de la versión. Dentro de este bloque, usa packageScope para enumerar los paquetes específicos que deseas optimizar. En tu archivo build.gradle.kts, incluye tu lista de paquetes en setOf().

Kotlin

android {
  buildTypes {
    release {
      proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")
      optimization {
        enable = true
        packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
      }
    }
  }
}

Groovy

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      optimization {
        enable = true
        packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
      }
    }
  }
}

Prueba la optimización

Después de aplicar o actualizar la declaración de 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 tu 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 tu app. Este proceso implica expandir de forma incremental tu cobertura de optimización:

  1. Comienza con bibliotecas estables. Comienza por incluir solo las bibliotecas estables y de uso generalizado 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 buenos candidatos para agregar a la lista de 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 reflexión, serialización o llamadas de código nativo (JNI) pesadas.
    2. Prioriza según el tamaño del paquete. Usa el Analizador de APK de Android Studio para identificar los mayores factores que contribuyen al tamaño de tu app. 1. Compila un APK o AAB de lanzamiento con R8 desactivado. 1. Ábrelo en el Analizador y examina los archivos dex. 1. Ordenar los paquetes por tamaño Los paquetes más grandes ofrecen el mayor retorno de la inversión (ROI) para la optimización. Segmentar primero para estos elementos te brinda 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 Cómo elegir bibliotecas de forma inteligente 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 los paquetes de aplicación 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, incluye los paquetes en packageScope y agrega reglas de conservación para todo el paquete en los paquetes requeridos. Itera las reglas de conservación para definirlas mejor.
  5. Pasa a usar R8 en toda tu app. Después de que la mayoría de las dependencias de tu app se incluyan en la declaración de packageScope y tu app sea estable, quita packageScope para optimizar toda tu app en modo completo.