Complemento de Android para Gradle 8.3.0 (febrero de 2024)

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

Compatibilidad

El nivel de API máximo que admite el complemento de Android para Gradle 8.3 es el nivel de API 34. Aquí tienes más información sobre la compatibilidad:

Versión mínima Versión predeterminada Notas
Gradle 8.4 8.4 Para obtener más información, consulta cómo actualizar Gradle.
Herramientas de desarrollo del SDK 34.0.0 34.0.0 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.

Las siguientes son funciones nuevas del complemento de Android para Gradle 8.3.

Versiones de parches

La siguiente es una lista de las versiones de parche de Android Studio Iguana y el complemento de Android para Gradle 8.3.

Android Studio Iguana | 2023.2.1 Parche 2 y AGP 8.3.2 (abril de 2024)

Esta actualización menor incluye estas correcciones de errores.

Android Studio Iguana | 2023.2.1 Parche 1 y AGP 8.3.1 (marzo de 2024)

Esta actualización menor incluye estas correcciones de errores.

Compatibilidad con catálogos de versiones de Gradle

Android Studio admite catálogos de versiones de Gradle basados en TOML, una función que te permite administrar dependencias en una ubicación central y compartirlas entre módulos o proyectos. Ahora, Android Studio facilita la configuración de catálogos de versiones a través de sugerencias del editor y la integración con el diálogo Project Structure. Obtén información para configurar catálogos de versiones de Gradle o para migrar tu compilación a catálogos de versiones.

Finalización de código y navegación

Android Studio ofrece la finalización de código cuando editas un catálogo de versiones en el formato de archivo TOML o agregas una dependencia de un catálogo de versiones a un archivo de compilación. Para usar la finalización de código, presiona Ctrl+Espacio (Comando+Espacio en macOS). Además, puedes navegar rápidamente desde una referencia de dependencia en el archivo build.gradle de tu app hasta donde se declara en el catálogo de versiones presionando Ctrl + b (Comando + b en macOS).

Finalización de código cuando se agrega una dependencia

Integración con el diálogo Project Structure

Si tu proyecto usa un catálogo de versiones definido en el formato de archivo TOML, puedes editar las variables que definiste allí a través de la vista Variables del diálogo Project Structure (File > Project Structure > Variables) en Android Studio. Para cada catálogo de versiones, hay un menú desplegable que muestra las variables de ese catálogo. Para editar una variable, haz clic en su valor y reemplázalo. Cuando grabes estos cambios, el archivo TOML se actualizará según corresponda.

Variables de un catálogo de versiones en el diálogo Project Structure

También puedes actualizar las dependencias en la vista Dependencies del diálogo Project Structure (File > Project Structure > Dependencies). Para actualizar las versiones con el diálogo Project Structure, navega al módulo y la dependencia que deseas editar y, luego, actualiza el campo Requested Version. Cuando guardas estos cambios, el archivo TOML se actualiza según corresponda. Ten en cuenta que, si la versión de la dependencia se definió con una variable, actualizar la versión directamente de esta manera reemplaza la variable por un valor codificado. Además, ten en cuenta que quitar una dependencia de un archivo de compilación, ya sea que uses el diálogo Project Structure o no, no quita la dependencia del catálogo de versiones.

Dependencias de un catálogo de versiones en el diálogo Project Structure

Problemas conocidos y limitaciones

Los siguientes son problemas o limitaciones conocidos con la compatibilidad de los catálogos de versiones de Gradle en Android Studio.

  • Error de resaltado de declaraciones de alias de complementos en archivos de secuencia de comandos de Kotlin: Cuando agregas una declaración de complemento del formulario alias(libs.plugins.example), el editor agrega un subrayado rojo debajo de la parte libs. Este es un problema conocido en las versiones 8.0 y anteriores de Gradle, y se resolverá en una versión futura de Gradle.

  • Android Studio solo admite catálogos de versiones en formato TOML: actualmente, la compatibilidad con la finalización de código, la navegación y el diálogo de Project Structure de Android Studio solo está disponible para los catálogos de versiones definidos en el formato de archivo TOML. Sin embargo, puedes agregar un catálogo de versiones directamente en el archivo settings.gradle y usar sus dependencias en tu proyecto.

  • No se admite la navegación para archivos de compilación de KTS: aún no se admite la navegación a una definición de dependencia en un catálogo de versiones con Control + clic (Comando + clic en macOS) para archivos de compilación escritos con la secuencia de comandos de Kotlin.

  • Firebase Assistant agrega dependencias directamente en las secuencias de comandos de compilación: Firebase Assistant agrega dependencias directamente a tus secuencias de comandos de compilación en lugar de hacerlo a través de catálogos de versiones.

  • La función "Find usages" no es compatible: aún no se admite encontrar usos de una variable de catálogo de versiones en otros archivos de compilación, ya sea que el archivo de compilación esté en KTS o Groovy. Es decir, usar Control + clic (Comando + clic en macOS) en una definición de variable en un catálogo de versiones no dirige a los archivos de compilación en los que se usa la variable.

  • El diálogo Project Structure de Android Studio muestra varios archivos de catálogo si están en la carpeta raíz gradle, pero no muestra catálogos para una compilación compuesta. Por ejemplo, si tienes dos archivos de catálogo, uno para tu app y uno para una compilación compuesta, el diálogo de estructura del proyecto solo muestra el archivo de catálogo de la app. Puedes usar una compilación compuesta, pero debes editar su archivo TOML directamente.

Estadísticas adicionales del SDK: problemas con las políticas

Android Studio muestra advertencias de lint en los archivos build.gradle.kts y build.gradle, y en el diálogo Project Structure para los SDKs públicos que tienen incumplimientos de las políticas de Play en el Índice SDK de Google Play. Debes actualizar las dependencias que infrinjan las políticas de Play, ya que estos incumplimientos podrían impedir que publiques contenido en Google Play Console en el futuro. Las advertencias de incumplimiento de política complementan las advertencias de versión desactualizada que muestra Android Studio.

Compatibilidad con la versión de compileSdk de Android Studio

Android Studio muestra una advertencia si tu proyecto usa un compileSdk que no es compatible con la versión actual de Android Studio. Si está disponible, también te sugiere cambiar a una versión de Android Studio que admita el compileSdk que usa tu proyecto. Ten en cuenta que actualizar Android Studio también puede requerir que actualices AGP. AGP también muestra una advertencia en la ventana de herramientas Build si la compileSdk que usa tu proyecto no es compatible con la versión actual de AGP.

Cambios en el comportamiento de lint

A partir del complemento de Android para Gradle 8.3.0-alpha02, cuando se ejecuta lint en un módulo, se ejecutan tareas de análisis de lint separadas para los componentes principales y de prueba del módulo. El motivo de este cambio es mejorar el rendimiento. Para volver al comportamiento anterior, configura android.experimental.lint.analysisPerComponent=false en el archivo gradle.properties.

La reducción de recursos precisa está activada de forma predeterminada

La reducción de recursos precisa, que quita las entradas que no se usan del archivo resources.arsc y elimina los archivos de recursos que no se usan, está activada de forma predeterminada. Cuando se habilita esta reducción, se reduce tu tabla de recursos y solo se incluyen en el APK las entradas de carpeta res a las que se hace referencia.

Para desactivar la reducción precisa de recursos, establece android.enableNewResourceShrinker.preciseShrinking como false en el archivo gradle.properties de tu proyecto.

Errores corregidos

Complemento de Android para Gradle 8.3.0

Errores corregidos
Complemento de Android para Gradle
La caché de compilación es redundante para la tarea PackageForUnitTest.
[AGP 8.1.0] La prueba ./gradlew falla y muestra el mensaje de que no se pudo encontrar el resultado del manifiesto si tanto splits.abi.isEnable como testOptions.unitTests.isIncludeAndroidResources son verdaderos.
La compilación del modelo de AGP falla con compilaciones compuestas de Gradle anidadas.
El reductor de recursos altera los IDs de recursos, lo que provoca fallas en el tiempo de ejecución.
La verificación de la versión mínima de Gradle no se ejecuta en la segunda compilación ni después.
Se produce un fallo la ejecución de ':app:mergeReleaseClasses' después de actualizar AGP de 8.0.2 a 8.1.0.
[Gradle 8.4][actualización] Prueba de integración fallida después de la actualización debido al uso de una función obsoleta en el complemento de Gradle de Kotlin.
No se verifica la existencia de archivos de superposición de manifiestos durante la fase de configuración.
Vínculo roto al documento de Gradle debido al error MergeJavaResWorkAction.
Gradle 8.1 interrumpe el almacenamiento en caché debido a .gradle/.android/analytics.settings.
El AGP no debe usar ProjectComponentIdentifier.projectPath sin ProjectComponentIdentifier.build.
Se reduce o quita el registro de nivel de información del AGP "Analytics otro complemento para proto: ...".
[Gradle 8.4] [actualización] La operación de archivos durante la configuración en ProcessJavaResTask interrumpe el almacenamiento en caché de la configuración.
Se usa la API de Variant para obtener una tabla de símbolos (R.txt).
El complemento independiente de lint no controla la dependencia gradleApi() de forma correcta.
kDocs en clases/propiedades del AGP es deficiente. "VariantOutput.enable" sugiere que se debe reemplazar por "VariantOutput.enable".
AGP 8.3.0-alpha02 no puede instalar perfiles de versión en hosts de Windows.
Se aplica de manera forzada "android.enableDexingArtifactTransform=true".
[Gradle 8.4] [actualización] Prueba de integración fallida después de la actualización debido al manejo de archivos en la fase de configuración.
AGP 8.3.0-alpha-02 se produce un error que deserializa el repositorio de recursos almacenados en caché.
[Gradle 8.4] [actualización] Prueba de integración fallida después de la actualización debido al manejo de archivos en la fase de configuración de TestLabBuildService
AGP 8.1.0 desinstala la app después de ejecutar pruebas de instrumentación; la versión 7.4.2 no la desinstala.
La transformación de un APK genera un error con ListingFileRedirectTask.
La transformación del artefacto ASSETS resulta en ubicaciones de entrada/salida rotas.
Se promueve android.experimental.r8.dex-startup-optimization=true para que sea el valor predeterminado.
Migración a la nueva API de alineación de configuración de Gradle.
La compilación de recursos falla cuando el compilador de Kotlin intenta actualizar a IDEA 21.3.
get() reactivo con la API de artefactos.
Se graduó la propiedad de AGP "android.lint.printStackTrace" a la versión estable.
AGP 8.1.0: Función dinámica: La dependencia implícita entre exportReleaseConsumerProguardFiles y extractProguardFiles causa errores de compilación.
Al parecer, "variant.unitTest.jniLibs.addGeneratedSourceDirectory" no hace nada.
Actualización del analizador XML que se usa en AGP para la compatibilidad con Gradle 8.4.
El instrumento de Jacoco del paquete de lanzamiento de AGP 8.0.1 no tiene efecto.
REGRESIÓN DE HEDGEHOG: El botón para ejecutar tiene una demora de unos segundos (creando las especificaciones).
AGP 8.3.0-alpha11 produce un APK de lanzamiento que falla al inicio con android.content.res.Resources$NotFoundException.
Se graduó la propiedad de AGP "android.lint.printStackTrace" a la versión estable.
Solicitud de función: Ahora com.android.build.api.extension.impl.CURRENT_AGP_VERSION es una API pública.
SDK Manager debería dejar de enviar spam a la información de registro a stdout.
DexArchiveBuilderTaskDelegate produjo un error con el módulo de biblioteca de solo recursos
Variante personalizada del complemento toTransform de AGP7.4 para todas las entradas duplicadas: excepción META-INF/MANIFEST.MF
Compatibilidad con nuevas etiquetas del manifiesto
El vínculo para los "proyectos separados" en la configuración de Studio dirige a una página incorrecta.
Proporciona opciones para incluir fuentes generadas en Javadoc y SourceJar
Se necesita una corrección rápida para la discrepancia entre compileSdk y la dependencia con minCompileSdkVersion
[Gradle] tools:overrideLibrary debe admitir el asterisco (*)
Se bloquea la IU cuando se edita el manifiesto
No se puede establecer la versión de JaCoCo en AGP 8.2.0.
La tarea de instalación del complemento de Android para Gradle 8.2.0 falla en proyectos que usan funciones dinámicas.
La tarea de instalación del complemento de Android para Gradle 8.2.0 falla en proyectos que usan funciones dinámicas.
Dexer (D8)
[Biblioteca de expansión de sintaxis] La versión 2.1 de la biblioteca con expansión de sintaxis no es compatible con versiones anteriores de R8.
¿Se pueden ejecutar optimizaciones solo con D8?
Lint
[Lint] TranslucentViewDetector falla en la función filterIncident y hace que lint genere un resultado incorrecto.
TranslucentViewDetector debería aceptar el valor "behind".
Android Lint falla en una biblioteca KMP con el mensaje de que la propiedad variantInputs.name no tiene un valor configurado.
TranslucentViewDetector informa una línea incorrecta en el manifiesto.
lintDebug informa erróneamente advertencias de UseTomlInstead cuando usa dependencias del proyecto.
Problemas inesperados de otro proyecto que marcó Android Lint.
No se usa la verificación de Lint de detección de falsos positivos de recursos entre la vinculación y el objeto de escucha de clics.
No se carga el archivo jar de comprobación de lint personalizado lo que genera que no se pueda transmitir el nodo a TreeNode.
No se llama a visitAnnotationUsage de lint para el uso de clases con anotaciones en declaraciones de variables.
Lint 31.0.2 falla con java.util.NoSuchElementException porque el array está vacío.
No hay advertencia de lint sobre kotlin.text.MatchNamedGroupCollection#get(String) que requiere el nivel de API 26.
Falsos negativos de lint:TypographyQuotes: Se ignora más de un apóstrofo de escape.
Falso positivo del detector de InvalidId en AGP 8.0.2.
Se agregaron problemas de LintError a los modelos de referencia de lint.
La corrección rápida de lint no funciona y genera un error de IDE.
Se generan fallos inconsistentes de la prueba debido al análisis parcial.
Destacado no válido de una advertencia que es un falso positivo.
No se llama a visitAnnotationUsage de lint para el uso de clases con anotaciones en declaraciones de variables.
El procesador de recursos no utilizado podría borrar el archivo de compilación de Gradle.
La verificación de lint de NewApi no interpreta el campo final "isAtleastU() && otherCondition()".
StackOverflow desde "LintClient.getSdkHome"
Android Studio y Lint no indican cuándo las dependencias de la "plataforma" están desactualizadas
Error: No hay sugerencias para actualizar la dependencia de Firebase-bom
Project Structure (y Gradle (?)) no descubren las dependencias de la BoM de Firebase que se actualizarán a una versión más reciente
Integración de lint
Error de lint DuplicatePlatformClasses de la dependencia testImplementation.
Reductor (R8)
R8 no funciona después de la actualización de AGP 8.0.2 a 8.1.0.
isShrinkResources optimiza, de forma excesiva, en 8.3.0-alpha11 a alpha14
El SDK de Flurry R8 falla con AGP 8.2.0
Android: R8 hace que falle la subclase de LinearLayoutManager
R8 v8.2.33: Falla del entorno de ejecución "java.lang.VerifyError: Bad type on operand stack" después de la actualización
[R8 8.3.21] R8 8.3.21 es 1.57 MB más grande que R8 8.1.56.
[R8 8.3.21] R8 8.3.21 es 1.57 MB más grande que R8 8.1.56.
La función class.getInterfaces() muestra un valor vacío.
La prueba de SimpleKotlinEnumUnboxingTest falla en el bot kotlin_dev.

Complemento de Android para Gradle 8.3.1

Errores corregidos
Complemento de Android para Gradle
Problema de manejo de entradas incrementales de MergeJavaResourcesTask
Integración de lint
Lint no puede resolver los tipos de conjuntos de orígenes hermanos en AGP 8.3.0-rc02.

Complemento de Android para Gradle 8.3.2

Errores corregidos
Complemento de Android para Gradle
Puede ocurrir un interbloqueo en AGP 8.3 con la expansión de sintaxis habilitada.
AGP 8.3 interrumpe la tarea zipApksFor.
Integración de lint
Lint no puede desambiguar una dependencia de KMP.