Complemento de Android para Gradle 8.0.0 (abril de 2023)

El complemento de Android para Gradle 8.0.0 es una actualización importante que incluye una variedad de nuevas funciones y mejoras.

Compatibilidad

Versión mínima Versión predeterminada Notas
Gradle 8.0 8.0 Para obtener más información, consulta cómo actualizar Gradle.
Herramientas de desarrollo del SDK 30.0.3 30.0.3 Instala o configura las herramientas de compilación del SDK.
NDK N/A 25.1.8937393 Instala o configura una versión diferente del NDK.
JDK 17 17 Para obtener más información, consulta cómo configurar la versión de JDK.

Versiones de parches

La siguiente es una lista de las versiones de parche para el complemento de Android para Gradle 8.0.

Complemento de Android para Gradle 8.0.2 (mayo de 2023)

Para obtener una lista de los errores corregidos en AGP 8.0.2, consulta los problemas cerrados de Android Studio 2022.2.1.

Complemento de Android para Gradle 8.0.1 (mayo de 2023)

Esta actualización menor incluye las siguientes correcciones de errores:

Errores corregidos
Error: "No VersionRequirement with the given id in the table" después de actualizar AGP de 7.2.2 a 7.4.0.
R8 NullPointerException en MarkTypeAsLive AGP 7.4.1.
[R8 4.0.53] Falla de la verificación de la clase estricta en Android 11.

Cambio drástico: Se requiere un espacio de nombres en la secuencia de comandos de compilación a nivel del módulo

Debes configurar el espacio de nombres en el archivo build.gradle.kts a nivel del módulo, en lugar del archivo de manifiesto. Puedes comenzar a usar la propiedad DSL namespace a partir de AGP 7.3. Para obtener más información, consulta Configura un espacio de nombres.

Cuando migres a la DSL de espacio de nombres, ten en cuenta los siguientes problemas:

  • En algunos casos, las versiones anteriores de AGP infieren el espacio de nombres de prueba del espacio de nombres principal o del ID de aplicación de forma incorrecta. El Asistente de actualización de AGP bloquea la actualización si detecta que el espacio de nombres principal y el espacio de nombres de prueba de tu proyecto son los mismos. Si la actualización está bloqueada, debes cambiar testNamespace manualmente y modificar el código fuente según corresponda.
  • Después de cambiar el espacio de nombres de prueba, es posible que el código se compile, pero que las pruebas de instrumentación fallen durante el tiempo de ejecución. Esto puede suceder si tu código fuente de prueba instrumentada hace referencia a un recurso definido en tu androidTest y en las fuentes de la app.

Para obtener más información, consulta el comentario n.° 19 del problema #191813691.

Cambios rotundos: valores predeterminados de la opción de compilación

A partir de AGP 8.0, los valores predeterminados de estas marcas cambiaron para mejorar el rendimiento de la compilación. Para obtener ayuda para ajustar tu código y admitir algunos de estos cambios, usa el Asistente de actualización del AGP (Tools > AGP Upgrade Assistant). El Asistente de actualización te guía para actualizar tu código y adaptarlo al comportamiento nuevo o configurar marcas para preservar el comportamiento anterior.

Marca Nuevo valor predeterminado Valor predeterminado anterior Notas
android.defaults.buildfeatures.buildconfig false true AGP 8.0 no genera BuildConfig de forma predeterminada. Debes especificar esta opción con la DSL en los proyectos en los que la necesites.
android.defaults.buildfeatures.aidl false true AGP 8.0 no habilita la compatibilidad con AIDL de forma predeterminada. Debes especificar esta opción con la DSL en los proyectos en los que la necesites. Se planea quitar esta marca en AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 no habilita la compatibilidad con RenderScript de forma predeterminada. Debes especificar esta opción con la DSL en los proyectos en los que la necesites. Se planea quitar esta marca en AGP 9.0.
android.nonFinalResIds true false AGP 8.0 genera clases R con campos no finales de forma predeterminada.
android.nonTransitiveRClass true false AGP 8.0 genera clases R para los recursos definidos solo en el módulo actual.
android.enableR8.fullMode true false AGP 8.0 habilita el modo completo de R8 de forma predeterminada. Para obtener más información, consulta Modo completo de R8.

Cambios rotundos: Valores de opciones de compilación forzosos

A partir de AGP 8.0, ya no puedes cambiar los valores de estas marcas. Si los especificas en el archivo gradle.properties, se ignora el valor y AGP imprime advertencias.

Marca Valor aplicado Notas
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 emite una advertencia si detecta la resolución de configuración durante la fase de configuración, ya que afecta negativamente los tiempos de configuración de Gradle.
android.r8.failOnMissingClasses true AGP 8.0 falla en las compilaciones que usan R8 si faltan clases para garantizar una mejor optimización de DEX. Para abordar esto, debes agregar las bibliotecas que faltan o las reglas de retención de -dontwarn. Para obtener más información, consulta Advertencias de clases faltantes en el reductor R8.
android.testConfig.useRelativePath true Cuando se habilita la compatibilidad con el uso de recursos, activos y manifiestos de Android en las pruebas de unidades, AGP 8.0 genera un archivo test_config.properties que solo contiene rutas de acceso relativas. Esto garantiza que las pruebas de unidades de Android siempre puedan usar la caché de compilación de Gradle.
android.useNewJarCreator true AGP usa la biblioteca Zipflinger cuando crea archivos JAR para mejorar el rendimiento de la compilación.
android.bundletool.includeRepositoriesInDependencyReport true Cuando se habilita la adición de información de dependencia de SDK en AAB y APK, AGP 8.0 también agrega una lista de repositorios de proyectos a esta información. Para obtener más información, consulta Información de dependencias de Play Console.
android.enableArtProfiles true Los perfiles de Baseline ahora siempre se generan. Consulta Perfiles de Baseline para obtener más información.
android.enableNewResourceShrinker true Usa la nueva implementación de reducción de recursos de forma predeterminada. El nuevo reductor de recursos incluye compatibilidad con funciones dinámicas.
android.enableSourceSetPathsMap true Se usa para calcular las asignaciones de rutas de acceso de recursos relativas, de modo que las compilaciones de Gradle estén actualizadas con mayor frecuencia.
android.cacheCompileLibResources true Los recursos de bibliotecas compilados ahora se pueden almacenar en caché de forma predeterminada porque Gradle hace un seguimiento de los archivos de recursos en relación con la ubicación del proyecto. Se requiere que android.enableSourceSetPathsMap esté habilitado.
android.disableAutomaticComponentCreation true AGP 8.0 no crea SoftwareComponent de forma predeterminada. En su lugar, AGP crea SoftwareComponents solo para las variantes que están configuradas para publicarse con el DSL de publicación.

Nueva marca estable para el perfil de ejecución

AGP incluye la nueva marca android.settings.executionProfile. Usa esta marca para anular el perfil de ejecución predeterminado de SettingsExtension. Para obtener más información, consulta la documentación del complemento de configuración.

Para obtener una vista previa de las marcas experimentales, consulta las notas de la versión preliminar.

No se admite la asignación de propiedades diferidas de Kotlin.

Si usas el DSL de Kotlin de Gradle para tus secuencias de comandos de compilación, ten en cuenta que Android Studio y AGP 8.0 no admiten la asignación experimental de propiedades con el operador =. Para obtener más información sobre esta función, consulta las notas de la versión y la documentación.

Categorías de tareas de Build Analyzer

A partir de Android Studio Flamingo, el analizador de compilaciones tiene una nueva vista predeterminada para las tareas que afectan la duración de la compilación. Si tu proyecto usa AGP 8.0 o una versión posterior, en lugar de mostrar las tareas de forma individual, Build Analyzer las agrupa por categoría. Por ejemplo, las tareas específicas de los recursos de Android, Kotlin o Dexing se agrupan y, luego, se ordenan por duración de compilación. Esto facilita saber qué categoría tiene el mayor impacto en el tiempo de compilación. Si expandes cada categoría, se mostrará una lista de las tareas correspondientes. Para mostrar las tareas de forma individual, ilmas agruparlas, usa el menú desplegable Agrupar por.

Categorías de tareas de Build Analyzer

Nuevo complemento de configuración

AGP 8.0.0-alpha09 presenta el nuevo complemento de configuración. El complemento de configuración te permite centralizar las configuraciones globales (configuraciones que se aplican a todos los módulos) en un solo lugar para que no tengas que copiar y pegar las configuraciones en varios módulos. Además, puedes usar el complemento de configuración para crear perfiles de ejecución de herramientas o diferentes instrucciones para ejecutar una herramienta y cambiar entre ellas.

Para usar el complemento de configuración, aplícalo en el archivo settings.gradle:

apply plugin 'com.android.settings'

Cómo centralizar las configuraciones globales

Para configurar parámetros de configuración globales, usa el nuevo bloque android en el archivo settings.gradle. Por ejemplo:

android {
  compileSdk 31
  minSdk 28
  ...
}

Perfiles de ejecución de herramientas

El complemento de configuración también te permite crear perfiles de ejecución para algunas herramientas. Un perfil de ejecución determina cómo se ejecuta una herramienta. Puedes seleccionar diferentes perfiles de ejecución según el entorno. En un perfil de ejecución, puedes establecer argumentos de JVM para una herramienta y configurarla para que se ejecute en un proceso independiente. Actualmente, solo se admite la herramienta R8.

Crea perfiles de ejecución y establece el perfil de ejecución predeterminado en el archivo settings.gradle, como se muestra en el siguiente ejemplo:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Para anular el perfil predeterminado, selecciona uno diferente con la propiedad android.experimental.settings.executionProfile en el archivo gradle.properties:

android.experimental.settings.executionProfile=high

También puedes establecer esta propiedad con la línea de comandos, que te permite configurar diferentes flujos de trabajo. Por ejemplo, si tienes un flujo de trabajo de integración continua, puedes usar la línea de comandos para cambiar el perfil de ejecución sin tener que cambiar el archivo settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

Se requiere JDK 17 para ejecutar AGP 8.0

Cuando usas el complemento de Android para Gradle 8.0 para compilar tu app, ahora se requiere JDK 17 para ejecutar Gradle. Android Studio Flamingo empaqueta JDK 17 y configura Gradle para usarlo de forma predeterminada. Esto significa que la mayoría de los usuarios de Android Studio no necesitan hacer cambios en la configuración de sus proyectos.

Si necesitas configurar manualmente la versión de JDK que usa AGP dentro de Android Studio, debes usar JDK 17 o una versión posterior.

Cuando uses AGP independiente de Android Studio, actualiza la versión de JDK configurando la variable de entorno JAVA_HOME o la opción de línea de comandos -Dorg.gradle.java.home en el directorio de instalación de JDK 17.

Errores corregidos

Complemento de Android para Gradle 8.0.0

Errores corregidos
Complemento de Android para Gradle
Error de compilación inestable en la tarea MergeResources
JavaPluginConvention y HasConvention dejaron de estar disponibles.
Ubicación del archivo incorrecta e inconsistente para la nueva API de transformación
El complemento de Android para Gradle no debería usar la función obsoleta GUtil.toWords(string).
El complemento de Android para Gradle no debe usar la función obsoleta ConfigureUtil.configure(closure, target).
Se actualizaron las pruebas de AGP para usar KGP 1.7.20-Beta.
Gradle 7.4 falla y no pudo crear la instancia de AnalyticsService.
Se agregó una nueva "constante de enumeración desconocida" de javac en AGP 7.4.0-alpha09.
La configuración de MergeGeneratedProguardFilesCreationAction es lenta incluso si está activado el almacenamiento en caché de la configuración.
[AGP] Se agregó un directorio del código fuente generado al modelo IDE (API de Variant).
JavaPluginConvention y HasConvention dejaron de estar disponibles.
No agregues ignorewarnings a R8 de forma predeterminada.
Se crea una advertencia cuando no existen archivos de ProGuard.
AGP 7.3.0 interrumpe la sincronización de Gradle para los proyectos de la plataforma de Gradle.
Biblioteca de apksig: ApkVerifier$Result.getV4SchemeSigners() se marca como privado.
Se deja de crear la configuración androidJacocoAnt si la cobertura no está habilitada.
El uso de @IntDef en un componente de biblioteca no genera anotaciones.zip en aar.
No se puede encontrar un supertipo común para y .
Se agrega una versión de propiedad Gradle de LINT_PRINT_STACKTRACE=true.
Se empaquetan en AAR artefactos prefab inactivos.
Se migra de la propiedad de destino a la propiedad outputLocation para abordar la advertencia de baja y prepararse para Gradle 9.0.
Ten en cuenta la marca "--release" cuando configures la tarea JavaCompile.
[AGP-7.3.0-beta03] ShrinkResourcesNewShrinkerTask falla cuando hay una línea vacía después de la declaración de XML.
El destino de lintVital se ejecuta de forma predeterminada en una variante de depuración.
Se crea una advertencia cuando no existen archivos de ProGuard.
AGP intenta agregar kotlinOptions.freeCompilerArgs en la fase de ejecución de la tarea.
Error de sincronización de Gradle: falló la sincronización por motivo desconocido.
DependencyReportTask no es compatible con la caché de configuración.
La anulación de recursos con resValue en build.gradle genera el error: Recursos duplicados.
El tipo de compilación de depuración tiene una clave de firma predeterminada, mientras que otras no.
El uso de funciones dinámicas y la reducción de recursos causan fallas en el tiempo de ejecución.
El tipo de compilación de depuración tiene una clave de firma predeterminada, mientras que otras no.
El directorio del código fuente generado se muestra como directorio de Java en el proveedor de fuente principal del modelo de lint.
Gradle 8.0-milestone-2 causa una excepción en AGP.
Optimiza la combinación de manifiestos para apps y bibliotecas.
Agrega gradle-settings-api a la generación de javadoc.
Se agregó una nueva "constante de enumeración desconocida" de javac en AGP 7.4.0-alpha09.
AGP 7.4.0-alpha09 genera compilaciones que no se suben a Firebase App Distribution
lint.xml en módulos no se considera para la comprobación UP-TO-DATE de las tareas de lint.
Error del complemento de Android para Gradle versión 7.0 y posteriores y de Android Tests: No se puede encontrar resource: id.
configureCMakeDebug falla de manera inestable con excepción de puntero nulo.
IllegalAccessError actualiza el proyecto a AS2022.2.1.5, FireBasePerfPlugin.
La sincronización falla con el error críptico "La colección no contiene ningún elemento que coincida con el predicado".
La API de instrumentación no transforma las dependencias de archivos locales.
Se muestra el error "AnnotationProcessorOptions.arguments are queried" cuando se actualiza a 7.4 Beta 1.
Se mueven los complementos públicos de Gradle a gradle-api y se quita BasePlugin.getExtension.
No se usan r8.jvmArgs.
JDK17 como versión mínima requerida para AGP.
AGP 8.0.0 A8 interrumpe los perfiles de Baseline.
Se cambia "compileSdkVersion" a "compileSdk" en el mensaje CheckAarMetadataTask en AGP 8.0.
AGP 7.4.0-rc01 interrumpe la API de Variant con el mensaje "Querying the mapped value of map(provider(java.util.Set)) before task '…' has completed is not supported".
Errores de "com.android.build.gradle.tasks.ShaderCompile" con la caché de configuración.
La adición a recursos de Java con las APIs de AGP interrumpe la caché de configuración.
El complemento de lint no forma parte de gradle-api.
DexingFileDependenciesTask.outputKeepRules es un directorio, pero está marcado como OutputFile.
La actualización a AGP 7.4 genera un StackOverflowError.
processDebugUnitTestManifest falla con los marcadores de posición del manifiesto para las variantes de prueba.
Lint accede a información de conjuntos de orígenes sin dependencias.
El error de compilación hace referencia al nivel de API 34, que no existe.
"Te recomendamos que uses el complemento de Android para Gradle más reciente" cuando no haya uno nuevo.
android.injected.testOnly=false no funciona.
Dexer (D8)
Se produce un error de combinación de Dex relacionado con los sintéticos globales después de la actualización de AS Canary 6 a 7.
Actualización de la biblioteca de metadatos de Kotlin a la versión 0.6.0.
Parece que se requiere una solución alternativa para JDK-8272564 en los niveles de API 28 a 30.
Lint
La comprobación de lint de ResourceType no funciona para las fuentes de Kotlin.
VersionChecks no controla las verificaciones de rango de Kotlin.
Se genera un falso positivo para InlinedApi cuando está unido.
Lint con falso positivo para Recycle en relación con openInputStream.
[BuildTool/Lint] Propiedad del constructor ChecksSdkIntAtLeast.
Lint: La combinación de PartialResults funciona de manera incorrecta.
Android Studio marca de forma incorrecta la versión que se especificó como desactualizada.
El EP de AndroidDeprecationInspection.DeprecationFilter nunca se registra en el archivo android-plugin.xml.
La explicación de la comprobación de lint de AccessibilityDetector está desactualizada.
Las comprobaciones de SDK_INT de lint deben comprender las variables locales temporales.
Se produce un error cuando TestMode.TYPE_ALIAS reemplaza el tipo Function por typealias.
Error: Cuando se crea ObjectAnimator fuera del bloque de código actual, hay advertencias de falsos positivos de no comenzarlo #38.
Lint: NPE debido a que se consultó la instancia de la aplicación en el modo mergeOnly.
La regla de lint de NonConstantResourceId no puede detectar para asignar valores constantes desde el ID de recurso.
No se muestra el error en el ID de visualización.
No se deserializa la caché de recursos de lint y se produce un error de lint (pero debería ser una advertencia).
Regresión de expansión de sintaxis de NewApi de lint alfa 8 de AGP Flamingo.
TypedArray#close (nivel de API 31) no realiza la expansión de sintaxis, pero AS no muestra una advertencia cuando se usa en try-with-resources.
Lint no verifica las transmisiones válidas para los receptores de llamadas.
Lint solo verifica las transmisiones seguras para las interfaces implementadas directamente, no para las heredadas.
Integración de lint
Actualmente, el archivo de referencia es una entrada y una salida de las tareas de lint.
Reductor (R8)
Error de NPE o aserción en el verificador del marco de CF
Se genera una regresión después de quitar la caché de búsqueda de campo.
`:app:minifyVariantWithR8` genera una NullPointerException en AGP 7.4.0-beta02.
R8: ClassNotFoundException cuando -allowaccessmodification.
Se agregó compatibilidad con receptores de contexto en los metadatos.
java.lang.VerifyError: El verificador rechazó la clase androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.No se pudo verificar (java.lang.Object): void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] no se pudo acceder al campo de la instancia java.lang.Object androidx.compose.ui.graphics.colorspace.n.a desde un objeto del tipo Referencia precisa: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1: Intenta poner en cola una acción de una lista de trabajo de elementos en cola que no se pueden enviar.
Reducción del código de Renderscript: Gran disminución del rendimiento cuando se actualiza AGP de 7.3.1 a 7.4.0.

Complemento de Android para Gradle 8.0.1

Errores corregidos
Reductor (R8)
Error: "No VersionRequirement with the given id in the table" después de actualizar AGP de 7.2.2 a 7.4.0.
R8 NullPointerException en MarkTypeAsLive AGP 7.4.1.
[R8 4.0.53] Falla de la verificación de la clase estricta en Android 11.

Complemento de Android para Gradle 8.0.2

Errores corregidos
Reductor (R8)
R8 falla durante la compilación de Compose con ArrayIndexOutOfBoundsException.
VerifyError: el verificador rechazó la clase cuando se usaba R8 con Kotlin 1.8.20.
R8 en AGP 8 interrumpe el servicio de Google Fit.
La inclusión de información del archivo de origen con nombres residuales que se superponen con los nombres de entrada no se representa correctamente.