Complemento de Android para Gradle 8.1.0 (julio de 2023)

El complemento de Android para Gradle 8.1.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 33.0.1 33.0.1 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.

Kotlin DSL es el valor predeterminado para la configuración de compilación.

Los proyectos nuevos ahora usan la DSL de Kotlin (build.gradle.kts) de forma predeterminada para la configuración de compilación. Esto ofrece una mejor experiencia de edición que la DSL de Groovy (build.gradle) con resaltado de sintaxis, autocompletado de código y navegación a declaraciones. Ten en cuenta que, si usas AGP 8.1 y el DSL de Kotlin para la configuración de compilación, debes usar Gradle 8.1 para obtener la mejor experiencia. Para obtener más información, consulta la guía de migración de DSL de Kotlin.

Compatibilidad automática de idioma de las apps

A partir de Android Studio Giraffe Canary 7 y AGP 8.1.0-alpha07, puedes configurar tu app para que admita automáticamente las preferencias de idioma de las apps. En función de los recursos de tu proyecto, el complemento de Android para Gradle genera el archivo LocaleConfig y le agrega una referencia en el archivo de manifiesto final, por lo que ya no tienes que hacerlo de forma manual. AGP usa los recursos de las carpetas res de los módulos de tu app y las dependencias de módulos de biblioteca para determinar las configuraciones regionales que se incluirán en el archivo LocaleConfig.

Ten en cuenta que la función automática de idioma de las apps admite apps que ejecutan Android 13 (nivel de API 33) o versiones posteriores. Para usar la función, debes establecer compileSdkVersion en 33 o un valor superior. Para configurar las preferencias de idioma de las apps en versiones anteriores de Android, debes usar las APIs y los selectores de idioma integrados en la app.

Para habilitar la compatibilidad automática de idioma de las apps, especifica una configuración regional predeterminada:

  1. En la carpeta res del módulo de la app, crea un archivo nuevo llamado resources.properties.
  2. En el archivo resources.properties, establece la configuración regional predeterminada con la etiqueta unqualifiedResLocale. Para formar los nombres de configuración regional, combina el código de idioma con la secuencia de comandos opcional y los códigos regionales, y separa cada uno con un guion:

    • Idioma: Usa el código ISO 639-1 de dos o tres letras.
    • Secuencia de comandos (opcional): Usa el código ISO 15924.
    • Región (opcional): Usa el código ISO 3166-1-alpha-2 de dos letras o el código UN_M.49 de tres dígitos.

    Por ejemplo, si tu configuración regional predeterminada es Inglés (Estados Unidos):

        unqualifiedResLocale=en-US
        

AGP agrega esta configuración regional predeterminada y todas las configuraciones regionales alternativas que especificaste, con directorios values-* en la carpeta res, al archivo LocaleConfig generado automáticamente.

La compatibilidad automática de idioma de las apps está desactivada de forma predeterminada. Para activar la función, usa la configuración generateLocaleConfig en el bloque androidResources {} del archivo build.gradle.kts a nivel del módulo (archivo build.gradle si usas Groovy):

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint contiene código de bytes orientado a JVM 17

A partir de AGP 8.1.0-alpha04, Android Lint contiene código de bytes orientado a JVM 17. Si escribes verificaciones de lint personalizadas, debes compilar con JDK 17 o versiones posteriores, y especificar jvmTarget = '17' en las opciones del compilador de Kotlin.

Para obtener más información sobre la herramienta lint, consulta Cómo mejorar tu código con controles de lint.

Se trasladó la configuración de compresión de bibliotecas nativas a DSL

A partir de AGP 8.1.0-alpha10, recibirás una advertencia si no configuras la compresión de bibliotecas nativas con la DSL en lugar del manifiesto. En la siguiente guía, se explica cómo actualizar la configuración para usar la DSL. Para obtener ayuda para realizar estas actualizaciones, usa el Asistente de actualización del AGP (Tools > AGP Upgrade Assistant).

Para usar bibliotecas nativas sin comprimir, quita el atributo android::extractNativeLibs del manifiesto y agrega el siguiente código al archivo build.gradle.kts a nivel del módulo (archivo build.gradle si usas Groovy):

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

Marcas de compilación experimentales

Estas son marcas experimentales para configurar tu compilación disponible en AGP 8.1.

Marca Se agregó en Valor predeterminado Notas
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Si habilitas esta opción sin especificar ninguna configuración de firma, AGP usará la configuración de firma de depuración predeterminada cuando ejecutes una compilación perfilable o depurable. Esta marca está inhabilitada de forma predeterminada para alentar a los autores de compilaciones a declarar configuraciones de firma de perfiles específicas.
android.experimental.library.desugarAndroidTest AGP 8.0 false Esta marca permite que los compiladores de bibliotecas habiliten la expansión de sintaxis de la biblioteca principal para los APKs de prueba sin afectar el AAR producido, por ejemplo, a través de linting. Planeamos admitir este comportamiento en la API de Variant.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Si está habilitado, los dispositivos administrados por Gradle permiten un tipo de dispositivo personalizado definido por el usuario que puede proporcionar un complemento. Esta marca debe estar habilitada si quieres usar el complemento de Firebase Test Lab.
android.lint.printStackTrace AGP 8.0 false Si está habilitado, Android lint imprime un seguimiento de pila si falla. Esta marca tiene las mismas capacidades que la variable de entorno LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Ninguno Especifica la cantidad máxima de dispositivos administrados por Gradle (AVD) simultáneos que pueden estar activos en un momento determinado. Si el valor es 0 o negativo, no hay una cantidad máxima de dispositivos.
android.experimental.testOptions.installApkTimeout AGP 8.0 Ninguno Es la duración del tiempo de espera en segundos para instalar un APK. Si el valor es 0 o negativo, UTP lo establecerá en un valor predeterminado.

Errores corregidos

Complemento de Android para Gradle 8.1.0

Errores corregidos
Complemento de Android para Gradle
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.
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so se empaqueta dentro del APK.
KGP lee el manifiesto durante la configuración y se invalida la caché de configuración durante el cambio de manifiesto.
El mensaje de advertencia de compilación es poco claro cuando hay un problema en el manifiesto fusionado.
La actualización a AGP 7.4 genera un StackOverflowError.
ClassNotFoundException en función dinámica que depende directamente del subproyecto de la biblioteca de Kotlin.
processDebugUnitTestManifest falla con los marcadores de posición del manifiesto para las variantes de prueba.
processDebugUnitTestManifest falla con los marcadores de posición del manifiesto para las variantes de prueba.
La propiedad de espacio de nombres probablemente pertenezca a HasAndroidResources.
No se podía inhabilitar el mensaje "Los archivos de Gradle cambiaron desde la última sincronización del proyecto".
"Te recomendamos que uses el complemento de Android para Gradle más reciente" cuando no haya uno nuevo.
processDebugUnitTestManifest falla con los marcadores de posición del manifiesto para las variantes de prueba.
Marca booleana para inhabilitar la verificación del SDK de compilación en CheckAarMetadataTask.
El error de compilación hace referencia al nivel de API 34, que no existe.
La configuración de la cadena de herramientas de JVM no afecta el valor de JavaCompile targetCompatibility.
Las entradas de vínculo directo de navegación con dominios de comodín no tienen un atributo "android:host" en el manifiesto fusionado.
La tarea processDebugMainManifest falla desde el complemento de Android para Gradle 8.1.
¿Se puede quitar AnalyticsRecordingTask?
El contenido del archivo output-metadata.json no es coherente.
¿Se puede quitar AnalyticsRecordingTask?
El contenido del archivo output-metadata.json no es coherente.
La configuración de la cadena de herramientas de JVM no afecta el valor de JavaCompile targetCompatibility.
Las entradas de vínculo directo de navegación con dominios de comodín no tienen un atributo "android:host" en el manifiesto fusionado.
La tarea processDebugMainManifest falla desde el complemento de Android para Gradle 8.1.
Android Studio no respeta la variable de entorno STUDIO_GRADLE_JDK.
Los tipos de fuentes personalizadas deben crear conjuntos de fuentes de varios tipos
DependenciesInfoBuilder necesita la actualización y el documento de la API.
DexingNoClasspathTransform (minSdk >= 24) orientado a Java 11 falla debido a que faltan miembros anidados
DslExtension.Builder.extendProjectWith() no funciona como se describe en Groovy
Se agregó la API de VariantSelector.withFlavor que no usa kotlin.Pair
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) tiene un error de caché porque "proguard.txt" cambió
El manifiesto combinado de la app contiene atributos extractNativeLibs y useEmbedDex de dependencias
AGP: Se expuso la ruta de acceso a la herramienta de AIDL y al archivo de framework de AIDL como una API pública
Solicitud: permite que el IDE ofrezca una corrección para "PermittedSubclasses requires ASM9".
Error: "Enable KSP and use the KSP processor for this dependency instead" solo se dirige a un sitio web.
Gradle 8.1 interrumpe el almacenamiento en caché de la configuración debido a .gradle/.android/analytics.settings.
generateLocaleConfig in agp 8.1.0 usa el orden no determinista e interrumpe las compilaciones reproducibles.
Dexer (D8)
La expansión de sintaxis de la biblioteca principal provoca una falla de la app después de las actualizaciones recientes.
Regresión agp 8.1.0 en el nivel de API 21 - F/dex2oat ( 4176): art/compiler/handler/compiler_Driver.cc:1181] que indica que se produjo un error de verificación: !method->IsAbstract().
Lint
Lint solo verifica las transmisiones seguras para las interfaces implementadas directamente, no para las heredadas.
Lint no verifica las transmisiones válidas para los receptores de llamadas.
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.
Error: Advertencia de falso positivo de "The 'BC' provider is deprecated and as of Android P…".
Se genera un falso positivo de lint "remember" después de la actualización de Kotlin a la versión 1.8.0.
Se genera un falso positivo de advertencia de lint para las comprobaciones de SDK_INT que se realizan dentro de un método con un parámetro enum.
La comprobación de lint de TypographyQuotes no funciona con comillas escapadas.
La comprobación de lint de TrustAllX509TrustManager marcaba incorrectamente las interfaces que extienden X509TrustManager.
Reformatear solo el código insertado de una corrección de reemplazo.
Lint: La vista previa de intención arroja una excepción para ReplaceStringQuickFix.
Reductor (R8)
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.
R8 falla durante la compilación de Compose con ArrayIndexOutOfBoundsException.
El código simple de StringBuilder no aparece en la cola de llamada para la adición de versión o el modo debuggable=false.
Se produce un caso límite en el método VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds().
dex-startup-optimization genera java.lang.VerifyError: clase de rechazo.
Se produce falla con error de verificación en Android 12 y versiones posteriores.

Complemento de Android para Gradle 8.1.1

Errores corregidos
Dexer (D8)
Registros de Java 16: equals(null) arroja una NullPointerException.
Reductor (R8)
java.lang.VerifyError: El verificador rechaza la clase.
La compilación se bloquea en :minifyReleaseWithR8 cuando se usa la biblioteca de Apache POI.
Rechazo de la invocación cuando se habilita la optimización de R8
NoClassDefFoundError para java.lang.reflect.Executable

Complemento de Android para Gradle 8.1.2

Errores corregidos
Complemento de Android para Gradle
androidResources no está disponible en el módulo de la biblioteca de Android.
[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.
Reductor (R8)
Kotlin 1.9 hace que R8 destruya las lambdas de Kotlin si se quitan las verificaciones nulas.
R8 falla con el mensaje "Se encontró un valor no definido durante la compilación" para play-services-measurement-21.3.0-runtime.jar.

Complemento de Android para Gradle 8.1.3

Errores corregidos
Complemento de Android para Gradle
[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.
Falla de compilación después de actualizar a AGP 8.1

Complemento de Android para Gradle 8.1.4

Errores corregidos
Complemento de Android para Gradle
No ejecutes la tareas de conversión a dex en clases de subproyectos cuando ya se hayan convertido a través de transformaciones de artefactos