Notas de la versión preliminar del complemento de Android para Gradle

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 complementos com.android.library y com.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 de androidComponents. Esto puede ser más complejo, ya que la API de androidComponents 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 y
unitTestVariants
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)
    }
}
Es posible que no haya un reemplazo directo para todas las APIs anteriores. Informa un problema si hay un caso de uso que no cubren las nuevas APIs de variantes.
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 y
testServer
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 y
adbExe
Usar varios componentes del SDK de Android para tareas personalizadas Cambia a androidComponents.sdkComponents.
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider y
wrapJavaSourceSet
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.
falsetrue 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. falsetrue 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. falsetrue 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.
truefalse 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.
falsetrue 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.
falsetrue 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.
falsetrue 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. falsetrue 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. falsetrue 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>(); }
.
falsetrue 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. truefalse 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. truefalse 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. falsetrue 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 falsetrue 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:

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 a ApplicationExtension, LibraryExension, DynamicFeatureExtension y TestExtension.

    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:

APIs que se quitaron

El complemento de Android para Gradle 9.0 quita lo siguiente:

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
  }
}
en el archivo de compilación de Gradle de cada subproyecto que contenga fuentes de AIDL
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
extractNativeLibs y useEmbeddedDex no deberían provenir del manifiesto
Advertencias de R8 en AGP 9.0.0-alpha09
Lint
Kotlin integrado no agrega .kotlin_module a META-INF
La ruta de acceso de clase de Lint contiene clases duplicadas en diferentes versiones
La solución alternativa para anular recursos privados no funciona (tools:override = "true")

Complemento de Android para Gradle 9.0.0-alpha09

Errores corregidos
Complemento de Android para Gradle
El complemento "legacy-kapt" omite el procesamiento de anotaciones, a diferencia de "kotlin-kapt".
compileSdkSpec.minorApiLevel no funciona con SettingsExtension
[Biblioteca fusionada: pública] La biblioteca fusionada generada no incluye fuentes

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
Una compilación falla si hay tareas de generación de código
Con `android.builtInKotlin=false`, `android.newDsl=false` y `android.enableLegacyVariantApi=false`, el uso del complemento `kotlin-android` fallará con el mensaje "La API 'applicationVariants' está obsoleta".
El Kotlin integrado no resuelve kotlin-stdlib sin versión cuando kotlin.stdlib.default.dependency=false
DexData abre un archivo sin cerrarlo, lo que impide la limpieza
AndroidSourceDirectorySet debería dejar de extender PatternFilterable en AGP 9.0
Error de Test Fixture en módulos solo de prueba
Error incorrecto cuando se usan receptores de contexto en los datos de prueba
Errores incorrectos del IDE para el código de Kotlin en testFixtures

Complemento de Android para Gradle 9.0.0-alpha06

Errores corregidos
Complemento de Android para Gradle
El nuevo DSL de optimización no crea configuration.txt de forma predeterminada
AGP 8.13.0 no puede verificar el gráfico de navegación en un módulo
El AGP usa la API de Gradle obsoleta: notación de varias cadenas
Advertir a los usuarios que intentan usar la biblioteca multidex heredada con minSdkVersion >=21
Lint
La verificación Lint ChecksSdkIntAtLeast no comprueba si el valor anotado es correcto

Complemento de Android para Gradle 9.0.0-alpha05

Errores corregidos
Complemento de Android para Gradle
android.proguard.failOnMissingFiles no funciona para consumerProguardFiles
Se actualizó la dependencia del complemento de Kotlin Gradle a la versión 2.2.10
Crea KotlinJvmAndroidCompilation con la API de KGP
Se aplicó el modo de API explícita de Kotlin a las fuentes de prueba
Lint
Lint arroja la advertencia "No se pudieron limpiar las memorias caché de K2"

Complemento de Android para Gradle 9.0.0-alpha04

Errores corregidos
Complemento de Android para Gradle
Se cambió la versión predeterminada de Java de origen y destino de Java 8 a Java 11 en AGP 9.0
Cambia el valor predeterminado de android.useAndroidX a verdadero
Se mejoró la excepción cuando se aplica el complemento kapt con Kotlin integrado.
Lint
Lint arroja la advertencia "No se pudieron limpiar las memorias caché de K2"

Complemento de Android para Gradle 9.0.0-alpha03

Errores corregidos
Complemento de Android para Gradle
Cuando `isIncludeAndroidResources` está habilitado, `process{Variant}UnitTestManifest` no puede combinar los usos de tools:overrideLibrary en AGP 8.12.0
AGP genera advertencias de baja en Gradle para las tareas de prueba de JVM
DependencyReportTask no es compatible con la caché de configuración.
Lint
Error: La eliminación de recursos no utilizados tampoco quita sus traducciones ni pregunta al respecto

Complemento de Android para Gradle 9.0.0-alpha02

Errores corregidos
Complemento de Android para Gradle
Falla la compilación cuando no existe el archivo de ProGuard
Quita los parámetros predeterminados de buildconfig de las marcas de gradle.properties
Cambia el valor predeterminado de targetSdk de la app para que se base en compileSdk en lugar de minSdk

Complemento de Android para Gradle 9.0.0-alpha01

Errores corregidos
Complemento de Android para Gradle
Se quitó AndroidSourceSet.jni obsoleto en AGP 9.0
Se quita Installation.installOptions() en AGP 9.0
Se quitó BuildType.isRenderscriptDebuggable en AGP 9.0.
Quita android.defaults.buildfeatures.renderscript
`com.android.kotlin.multiplatform.library` falla con dispositivos administrados por Gradle
Se quitaron las marcas de gradle.properties predeterminadas de `android.defaults.buildfeatures.aidl`.