En esta página, se incluyen las notas de la versión de las versiones preliminares del complemento de Android para Gradle (AGP).
Complemento de Android para Gradle 9.0
El complemento de Android para Gradle 9.0 es una nueva versión principal del AGP que incluye cambios en el comportamiento y la API.
Para actualizar al complemento de Android para Gradle 9.0.0-alpha04, usa el Asistente de actualización del complemento de Android para Gradle en Android Studio Narwhal 4 Feature Drop | 2025.1.4.
El asistente de actualización del AGP ayuda a conservar los comportamientos existentes cuando actualizas tu proyecto, si es apropiado, lo que te permite actualizar tu proyecto para usar AGP 9.0, incluso si no estás listo para adoptar todos los nuevos valores predeterminados en AGP 9.0.
Compatibilidad
El nivel máximo de API de Android que admite el complemento de Android para Gradle 9.0.0-alpha04 es el nivel de API 36.
El complemento de Android para Gradle 9.0.0-alpha04 requiere Gradle 9.0.0.
Versión mínima | Versión predeterminada | Notas | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | Para obtener más información, consulta cómo actualizar Gradle. |
Herramientas de desarrollo del SDK | 36.0.0 | 36.0.0 | Instala o configura las herramientas de compilación del SDK. |
NDK | N/A | 28.2.13676358 | 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 implementaciones internas del DSL y la API de variantes obsoleta ahora requieren la habilitación explícita
El complemento de Android para Gradle ahora tiene una superficie de API definida, con las APIs compatibles definidas en el artefacto de Maven com.android.tools.build:gradle-api
.
Para garantizar la compatibilidad con los complementos binarios y las secuencias de comandos de compilación existentes, las implementaciones anteriores del DSL que son anteriores a la superficie de la API definida seguían expuestas de forma predeterminada en AGP 8.13 y versiones anteriores. Esto permite que el código de los complementos de Gradle y las secuencias de comandos de compilación accedan a los detalles de implementación internos del DSL, así como a las APIs android.applicationVariants
, android.libraryVariants
, android.testVariants
y android.unitTestVariants
que dejaron de estar disponibles y que se quitarán en 2026 en AGP 10.
Para que esta transición sea más visible, la API de variantes heredada y el DSL interno no son accesibles de forma predeterminada en el complemento de Android para Gradle 9.0.0-alpha04.
Puedes volver a habilitar el uso de la API obsoleta configurando android.newDsl=false
en gradle.properties
.
Durante la serie alfa de la versión 9.0, nos comunicaremos con los autores de complementos para ayudarlos a adaptar y lanzar complementos que sean totalmente compatibles con los nuevos modos, y mejoraremos el Asistente de actualización del AGP en Android Studio para guiarte durante la migración.
Kotlin integrado
El complemento de Android para Gradle 9 incluye compatibilidad integrada para compilar Kotlin, lo que reemplaza el complemento de Kotlin aplicado por separado. Esto simplifica la integración con AGP, evita el uso de las APIs obsoletas y mejora el rendimiento en algunos casos.
El complemento de Android para Gradle 9 tiene una dependencia de tiempo de ejecución en el complemento de Kotlin para Gradle 2.2.0, que es la versión mínima requerida para la compatibilidad integrada con Kotlin.
Puedes inhabilitar Kotlin integrado configurando android.builtInKotlin=false
.
Si inhabilitaste la opción y también necesitas usar una versión anterior del complemento de Gradle de Kotlin, puedes forzar la degradación.
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
Cambios en el comportamiento
El complemento de Android para Gradle 9.0 tiene los siguientes comportamientos nuevos:
Comportamiento | Recomendación |
---|---|
El complemento de Android para Gradle 9.0 usa la versión r28c del NDK de forma predeterminada.
|
Considera especificar explícitamente la versión del NDK que deseas usar. |
De forma predeterminada, el complemento de Android Gradle 9.0 requiere que los consumidores de una biblioteca usen la misma versión del SDK de compilación o una superior. |
Usa el mismo SDK de compilación o uno superior cuando consumas una biblioteca.
Si esto no es posible o quieres darles más tiempo a los consumidores de una biblioteca que publicas para que cambien, establece AarMetadata.minCompileSdk de forma explícita.
|
AGP 9.0 incluye actualizaciones en los valores predeterminados de las siguientes propiedades de Gradle. Esto te permite conservar el comportamiento de AGP 8.13 cuando realices la actualización:
Propiedad | Función | Cambio de AGP 8.13 a AGP 9.0 | Recomendación |
---|---|---|---|
android.newDsl |
Utiliza las nuevas interfaces de DSL sin exponer las implementaciones heredadas del bloque android .Esto también significa que ya no se puede acceder a la API de variantes heredada, como android.applicationVariants .
|
false → true |
Puedes inhabilitar esta opción configurando android.newDsl=false .Una vez que todos los complementos y la lógica de compilación que usa tu proyecto sean compatibles, quita la exclusión. |
android.builtInKotlin |
Se habilitó la compatibilidad para compilar código Kotlin directamente en el complemento de Android para Gradle, sin el complemento org.jetbrains.kotlin.android .
|
false → true |
Adopta Kotlin integrado quitando el uso del plugin org.jetbrains.kotlin.android si puedes.
De lo contrario, inhabilita la opción estableciendo android.builtInKotlin=false .
|
android.uniquePackageNames |
Exige que cada biblioteca tenga un nombre de paquete distinto. | false → true |
Especifica nombres de paquetes únicos para todas las bibliotecas de tu proyecto. Si eso no es posible, puedes inhabilitar esta marca mientras realizas la migración. |
android.dependency.useConstraints |
Controla el uso de restricciones de dependencia entre configuraciones. El valor predeterminado en AGP 9.0 es false , que solo usa restricciones en las pruebas de dispositivos de la aplicación (AndroidTest).
Si se establece en true , se volverá al comportamiento de la versión 8.13.
|
true → false |
No uses restricciones de dependencia en todas partes, a menos que las necesites. Aceptar el nuevo valor predeterminado de esta marca también habilita optimizaciones en el proceso de importación del proyecto, lo que debería reducir el tiempo de importación de las compilaciones con muchos subproyectos de bibliotecas de Android. |
aandroid.enableAppCompileTimeRClass |
Compila código en aplicaciones con una clase R no final, lo que alinea la compilación de la aplicación con la compilación de la biblioteca. Esto mejora la incrementalidad y allana el camino para futuras optimizaciones del rendimiento en el flujo de procesamiento de recursos. |
false → true |
Muchos proyectos pueden adoptar el nuevo comportamiento sin cambios en el código fuente. Si los campos de la clase R se usan en cualquier lugar que requiera una constante, como los casos de cambio, refactoriza para usar sentencias if encadenadas. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
Usa la versión del SDK de compilación como valor predeterminado para la versión del SDK de destino en apps y pruebas. Antes de este cambio, la versión del SDK de destino se establecía de forma predeterminada en la versión del SDK mínimo. |
false → true |
Especifica la versión del SDK de destino de forma explícita para las apps y las pruebas. |
android.onlyEnableUnitTestForTheTestedBuildType |
Solo crea componentes de pruebas de unidades para el tipo de compilación probado. En el proyecto predeterminado, esto genera una sola prueba de unidades para la depuración, mientras que el comportamiento anterior era ejecutar pruebas de unidades para la depuración o la versión. |
false → true |
Si tu proyecto no requiere que se ejecuten pruebas para la versión de depuración y la de lanzamiento, no es necesario realizar ningún cambio. |
android.proguard.failOnMissingFiles |
Si alguno de los archivos de conservación especificados en el DSL de AGP no existe en el disco, la compilación falla con un error. Antes de este cambio, los errores de escritura en los nombres de los archivos hacían que estos se ignoraran de forma silenciosa. | false → true |
Quita las declaraciones de archivos ProGuard no válidas |
android.r8.optimizedResourceShrinking |
Permite que R8 conserve menos recursos de Android, ya que considera las clases y los recursos de Android en conjunto. | false → true |
Si las reglas de conservación de tu proyecto ya están completas, no es necesario que realices ningún cambio. |
android.r8.strictFullModeForKeepRules |
Permite que R8 conserve menos elementos, ya que no conserva de forma implícita el constructor predeterminado cuando se conserva una clase.
Es decir, -keep class A ya no implica -keep class A { <init>(); } . |
false → true |
Si las reglas de conservación de tu proyecto ya están completas, no es necesario que realices ningún cambio.
Reemplaza -keep class A
por
-keep class A { <init>(); }
en las reglas de conservación de tu proyecto para los casos en los que necesites que se conserve el constructor predeterminado.
|
android.defaults.buildfeatures.shaders |
Habilita la compilación de sombreadores en todos los subproyectos. | true → false |
Habilita la compilación de sombreadores solo en los subproyectos que contengan sombreadores para compilar estableciendo lo siguiente en los archivos de compilación de Gradle de esos proyectos:
android { buildFeatures { shaders = true } } |
Funciones quitadas
El complemento de Android para Gradle 9.0 quita las siguientes funciones:
- Compatibilidad con apps para Wear OS incorporadas
AGP 9.0 quita la compatibilidad con la incorporación de apps para Wear OS, que ya no se admite en Play. Esto incluye quitar las configuraciones dewearApp
y el DSL deAndroidSourceSet.wearAppConfigurationName
. Consulta Distribuye a Wear OS para obtener información sobre cómo publicar tu app en Wear OS. - Tarea de informe de
androidDependencies
ysourceSets
DSL cambiada
El complemento de Android para Gradle 9.0 incluye los siguientes cambios rotundos en el DSL:
- Se quitó la parametrización de
CommonExtension
. En sí mismo, este es solo un cambio que interrumpe el código fuente para ayudar a evitar futuros cambios que interrumpan el código fuente, pero también significa que los métodos del bloque DSL deben moverse deCommonExtension
aApplicationExtension
,LibraryExension
,DynamicFeatureExtension
yTestExtension
.
Se quitó la DSL
El complemento de Android para Gradle 9.0 quita lo siguiente:
AndroidSourceSet.jni
, porque no funcionaba.AndroidSourceSet.wearAppConfigurationName
, ya que se relaciona con la compatibilidad con apps integradas para Wear OS que se quitó.BuildType.isRenderscriptDebuggable
, porque no funcionaba.ComponentBuilder.enabled
, que se reemplazó porComponentBuilder.enable
.DependencyVariantSelection
. Se reemplaza porDependencySelection
, que se expone comokotlin.android
.Installation.installOptions(String)
, que se reemplaza por la propiedad mutable deInstallation.installOptions
.VariantBuilder.targetSdk
ytargetSdkPreview
, ya que no eran significativos en las bibliotecas. En su lugar, usaGeneratesApkBuilder.targetSdk
oGeneratesApkBuilder.targetSdkPreview
.El bloque
PostProcessing
experimental, pero nunca estabilizado.ProductFlavor.setDimension
, que se reemplaza por la propiedaddimension
LanguageSplitOptions
, que solo era útil para Google Play Instant, que está en desuso.Variant.unitTest
, ya que no se aplicaba al complementocom.android.test
unitTest
está disponible en los subtiposVariantBuilder
que extiendenHasUnitTest
.VariantBuilder.enableUnitTest
, ya que no se aplicaba al complementocom.android.test
enableUnitTest
está disponible en los subtiposVariantBuilder
que extiendenHasUnitTestBuilder
.Se quitó
VariantBuilder.unitTestEnabled
y se reemplazó porenableUnitTest
, que tiene un nombre más coherente, en los subtiposVariantBuilder
que extiendenHasUnitTestBuilder
.
Se quitaron propiedades de Gradle
Inicialmente, las siguientes propiedades de Gradle se agregaron como formas de inhabilitar de manera global las funciones que estaban habilitadas de forma predeterminada.
Estas funciones están inhabilitadas de forma predeterminada desde AGP 8.0 o versiones anteriores. Habilita estas funciones solo en los subproyectos que las usen para lograr una compilación más eficiente.
Propiedad | Función | Reemplazo |
---|---|---|
android.defaults.buildfeatures.aidl |
Habilita la compilación de AIDL en todos los subproyectos. |
Habilita la compilación de AIDL solo en los subproyectos en los que haya fuentes de AIDL. Para ello, configura la siguiente propiedad en los archivos de compilación de Gradle de esos proyectos:
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
Habilita la compilación de RenderScript en todos los subproyectos |
Habilita la compilación de RenderScript solo en los subproyectos en los que haya fuentes de RenderScript. Para ello, configura la siguiente propiedad en los archivos de compilación de Gradle de esos proyectos:
android { buildFeatures { renderScript = true } } |
APIs que se quitaron
El complemento de Android para Gradle 9.0 quita lo siguiente:
- Las APIs de
BaseExtension.registerTransform
que quedaron obsoletas y se inhabilitaron, y que solo permanecieron para permitir la compilación con la versión más reciente de AGP mientras se segmentaba para ejecutarse en AGP 4.2 o versiones anteriores.
Propiedades de Gradle aplicadas
AGP 9.0 arroja un error si estableces las siguientes propiedades de Gradle.
El Asistente de actualización del complemento de Android para Gradle no actualizará los proyectos a la versión 9.0 del AGP que usen estas propiedades.
Propiedad | Función |
---|---|
android.r8.integratedResourceShrinking |
La reducción de recursos ahora siempre se ejecuta como parte de R8, y se quitó la implementación anterior. |