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-alpha10, usa el Asistente de actualización del complemento de Android para Gradle en Android Studio Otter | 2025.2.1.
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-alpha10 es el nivel de API 36.
El complemento de Android para Gradle 9.0.0-alpha10 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 clases de DSL de android
ahora solo implementan las nuevas interfaces públicas
En los últimos años, presentamos nuevas interfaces para nuestra DSL y API con el objetivo de controlar mejor qué APIs son públicas. Las versiones 7.x y 8.x del AGP seguían usando los tipos de DSL antiguos (por ejemplo, BaseExtension
), que también implementaban las nuevas interfaces públicas, para mantener la compatibilidad a medida que avanzaba el trabajo en las interfaces.
AGP 9.0 usa nuestras nuevas interfaces de DSL de forma exclusiva, y las implementaciones cambiaron a nuevos tipos que están completamente ocultos. Estos cambios también quitan el acceso a la API de variantes anterior, que dejó de estar disponible.
Para actualizar a AGP 9.0, es posible que debas hacer lo siguiente:
- Asegúrate de que tu proyecto sea compatible con Kotlin integrado: El complemento
org.jetbrains.kotlin.android
no es compatible con el nuevo DSL. Cambia los proyectos de KMP al complemento de biblioteca de Android Gradle para KMP: El uso del complemento
org.jetbrains.kotlin.multiplatform
en el mismo subproyecto de Gradle que los complementoscom.android.library
ycom.android.application
no es compatible con el nuevo DSL.Actualiza tus archivos de compilación: Si bien el cambio de interfaces tiene como objetivo mantener el DSL lo más similar posible, es posible que haya algunos cambios menores.
Actualiza la lógica de compilación personalizada para hacer referencia al nuevo DSL y la nueva API: Reemplaza cualquier referencia al DSL interno por las interfaces del DSL público. En la mayoría de los casos, será un reemplazo directo. Reemplaza cualquier uso de la API de
applicationVariants
y APIs similares por la nueva API deandroidComponents
. Esto puede ser más complejo, ya que la API deandroidComponents
está diseñada para ser más estable y mantener la compatibilidad de los complementos por más tiempo. Consulta nuestras Recetas de Gradle para ver ejemplos.Actualiza los complementos de terceros: Es posible que algunos complementos de terceros aún dependan de interfaces o APIs que ya no se exponen. Migra a versiones de esos complementos que sean compatibles con AGP 9.0.
El cambio a las nuevas interfaces de DSL evita que los complementos y las secuencias de comandos de compilación de Gradle usen varias APIs que dejaron de estar disponibles, incluidas las siguientes:
API obsoleta en el bloque android |
Función | Reemplazo |
---|---|---|
applicationVariants ,libraryVariants ,testVariants yunitTestVariants
|
Puntos de extensión para que los complementos agreguen nuevas funciones a AGP. |
Reemplaza esto por la API de androidComponents.onVariants , por ejemplo:
androidComponents { onVariants() { variant -> variant.signingConfig .enableV1Signing.set(false) } } |
variantFilter
|
Permite inhabilitar las variantes seleccionadas. |
Reemplaza esto por la API de androidComponents.beforeVariants , por ejemplo:
androidComponents { beforeVariants( selector() .withBuildType("debug") .withFlavor("color", "blue") ) { variantBuilder -> variantBuilder.enable = false } } |
deviceProvider ytestServer
|
Registro de entornos de prueba personalizados para ejecutar pruebas en dispositivos y emuladores de Android | Cambia a Dispositivos administrados por Gradle. |
sdkDirectory ,ndkDirectory ,bootClasspath ,adbExecutable yadbExe
|
Usar varios componentes del SDK de Android para tareas personalizadas |
Cambia a androidComponents.sdkComponents .
|
registerArtifactType ,registerBuildTypeSourceProvider ,registerProductFlavorSourceProvider ,registerJavaArtifact ,registerMultiFlavorSourceProvider ywrapJavaSourceSet |
Funcionalidad obsoleta relacionada principalmente con el manejo de fuentes generadas en Android Studio, que dejó de funcionar en AGP 7.2.0. | No hay un reemplazo directo para estas APIs. |
Si actualizas a AGP 9.0 y ves el siguiente mensaje de error, significa que tu proyecto aún hace referencia a algunos de los tipos anteriores:
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
Si los complementos de terceros incompatibles te bloquean, puedes inhabilitarlos y recuperar las implementaciones anteriores del DSL, así como la API de variantes anterior.
Mientras lo haces, las nuevas interfaces también están disponibles, y aún puedes actualizar tu propia lógica de compilación a la nueva API. Para inhabilitar la opción, incluye esta línea en tu archivo gradle.properties
:
android.newDsl=false
También puedes comenzar a actualizar a las nuevas APIs antes de actualizar a AGP 9.0. Las nuevas interfaces están presentes en muchas versiones de AGP, por lo que puedes tener una combinación de interfaces nuevas y antiguas. En la documentación de referencia de la API de AGP, se muestra la superficie de la API para cada versión de AGP y cuándo se agregó cada clase, método y campo.
Durante la fase 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.
Si detectas que faltan capacidades o funciones en el nuevo DSL o en la API de Variant, registra un problema lo antes posible.
Kotlin integrado
El complemento de Android para Gradle 9.0 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.0 tiene una dependencia de tiempo de ejecución en el complemento de Kotlin para Gradle 2.2.10, que es la versión mínima requerida para la compatibilidad integrada con Kotlin.
La versión integrada de Kotlin en AGP 9.0 ofrece compatibilidad total con el IDE de Android Studio para test-fixtures.
Para probar esto, usa AGP 9.0.0-alpha07
o una versión posterior.
Puedes inhabilitar Kotlin integrado configurando android.builtInKotlin=false
.
Si inhabilitaste Kotlin integrado y también necesitas usar una versión anterior del complemento de Gradle para Kotlin, puedes forzar la reversión a una versión anterior:
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.resvalues |
Habilita resValues en todos los subproyectos.
|
true → false |
Habilita resValues solo en los subproyectos que lo necesiten. Para ello, configura lo siguiente en los archivos de compilación de Gradle de esos proyectos:
android { buildFeatures { resValues = true } } |
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 } } |
android.r8.proguardAndroidTxt.disallowed |
En AGP 9.0, getDefaultProguardFile() solo admitirá proguard-android-optimize.txt en lugar de proguard-android.txt . Esto es para evitar el uso accidental de la marca dontoptimize , que se incluye en proguard-android.txt .
|
false → true |
Puedes especificar dontoptimize de forma explícita en un proguardFile personalizado si deseas evitar la optimización, además de usar proguard-android-optimize.txt . Si es posible, asegúrate de quitar la marca dontoptimize de este archivo, ya que reduce los beneficios de la optimización de R8. De lo contrario, inhabilita la opción configurando android.r8.globalOptionsInConsumerRules.disallowed=false .
|
android.r8.globalOptionsInConsumerRules.disallowed |
A partir de AGP 9.0, fallará la publicación de módulos de funciones y bibliotecas de Android si los archivos de conservación del consumidor contienen configuraciones de ProGuard problemáticas. Los archivos de conservación del consumidor que incluyen opciones globales, como dontoptimize o dontobfuscate , solo se deben usar en módulos de aplicación y pueden reducir los beneficios de optimización para los usuarios de la biblioteca. La compilación del módulo de la app para Android ignorará de forma silenciosa cualquier opción global de este tipo si está integrada en una dependencia precompilada (JAR o AAR). Puedes verificar cuándo ocurre esto consultando configuration.txt (por lo general, en una ruta de acceso como <app_module>/build/outputs/mapping/<build_variant>/configuration.txt ) para ver comentarios como: # REMOVED CONSUMER RULE: dontoptimize
|
false → true |
Las bibliotecas publicadas deben quitar las reglas incompatibles. Las bibliotecas internas deben mover las reglas incompatibles, pero obligatorias, a un proguardFile en un módulo de app. Para rechazarla, establece android.r8.globalOptionsInConsumerRules.disallowed=false . Una vez que todos tus archivos de conservación del consumidor sean compatibles, quita la inhabilitación.
|
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 genera interrupciones a nivel de la fuente para ayudar a evitar futuros cambios que generen interrupciones a nivel de la fuente, pero también significa que los métodos de bloqueo deben pasar de
CommonExtension
aApplicationExtension
,LibraryExension
,DynamicFeatureExtension
yTestExtension
.Cuando actualices tu proyecto a AGP 9.0, refactoriza el código del complemento de Gradle que usa esos parámetros o los métodos de bloque. Por ejemplo, el siguiente complemento se actualiza para quitar el parámetro de tipo y no depender de los métodos de bloque quitados:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }
AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }
En el caso de los complementos que se orientan a un rango de versiones del AGP, usar el getter directamente es compatible a nivel binario con las versiones del AGP anteriores a la 9.0.
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.DependencyVariantSelection
. Se reemplaza porDependencySelection
, que se expone comokotlin.android.localDependencySelection
.Installation.installOptions(String)
, que se reemplaza por la propiedad mutable deInstallation.installOptions
.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.
APIs que se quitaron
El complemento de Android para Gradle 9.0 quita lo siguiente:
AndroidComponentsExtension.finalizeDSl
, que se reemplazó porfinalizeDsl
Component.transformClassesWith
, que se reemplazó porInstrumentation.transformClassesWith
Component.setAsmFramesComputationMode
, que se reemplazó porInstrumentation.setAsmFramesComputationMode
ComponentBuilder.enabled
, que se reemplazó porComponentBuilder.enable
.DependenciesInfoBuilder.includedInApk
. Se reemplaza porincludeInApk
DependenciesInfoBuilder.includedInBundle
. Se reemplaza porincludeInBundle
GeneratesApk.targetSdkVersion
. Se reemplaza portargetSdk
Variant.minSdkVersion
. Se reemplaza porminSdk
Variant.maxSdkVersion
. Se reemplaza pormaxSdk
Variant.targetSdkVersion
. Se reemplaza portargetSdk
Variant.unitTest
, ya que no se aplicaba al complementocom.android.test
unitTest
está disponible en los subtiposVariantBuilder
que extiendenHasUnitTest
.VariantBuilder.targetSdk
ytargetSdkPreview
, ya que no eran significativos en las bibliotecas. En su lugar, usaGeneratesApkBuilder.targetSdk
oGeneratesApkBuilder.targetSdkPreview
.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
.VariantOutput.enable
. Se reemplaza porenabled
FeaturePlugin
yFeatureExtension
, que dejaron de estar disponibles y se inhabilitaron.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.
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 } } |
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. |
Errores corregidos
Complemento de Android para Gradle 9.0.0-alpha10
Errores corregidos | ||||
---|---|---|---|---|
Complemento de Android para Gradle |
|
|||
Lint |
|
Complemento de Android para Gradle 9.0.0-alpha09
Errores corregidos | ||||
---|---|---|---|---|
Complemento de Android para Gradle |
|
Complemento de Android para Gradle 9.0.0-alpha08
Errores corregidos | |
---|---|
No se marcaron problemas públicos como solucionados en AGP 9.0.0-alpha08 |
Complemento de Android para Gradle 9.0.0-alpha07
Errores corregidos | |||||||||
---|---|---|---|---|---|---|---|---|---|
Complemento de Android para Gradle |
|
Complemento de Android para Gradle 9.0.0-alpha06
Errores corregidos | |||||
---|---|---|---|---|---|
Complemento de Android para Gradle |
|
||||
Lint |
|
Complemento de Android para Gradle 9.0.0-alpha05
Errores corregidos | |||||
---|---|---|---|---|---|
Complemento de Android para Gradle |
|
||||
Lint |
|
Complemento de Android para Gradle 9.0.0-alpha04
Errores corregidos | ||||
---|---|---|---|---|
Complemento de Android para Gradle |
|
|||
Lint |
|
Complemento de Android para Gradle 9.0.0-alpha03
Errores corregidos | ||||
---|---|---|---|---|
Complemento de Android para Gradle |
|
|||
Lint |
|
Complemento de Android para Gradle 9.0.0-alpha02
Errores corregidos | ||||
---|---|---|---|---|
Complemento de Android para Gradle |
|
Complemento de Android para Gradle 9.0.0-alpha01
Errores corregidos | |||||||
---|---|---|---|---|---|---|---|
Complemento de Android para Gradle |
|