Complemento de Android para Gradle 7.0.0 (julio de 2021)
El complemento de Android para Gradle 7.0.0 es una actualización importante que incluye una variedad de y funciones de Google Workspace.
7.0.1 (agosto de 2021)
Esta actualización menor incluye diversas correcciones de errores. Para ver una lista de las correcciones de errores más importantes, consulta la publicación relacionada en el Blog de actualizaciones de versiones.
Compatibilidad
Versión mínima | Versión predeterminada | Notas | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | Para obtener más información, consulta cómo actualizar Gradle. |
Herramientas de desarrollo del SDK | 30.0.2 | 30.0.2 | Instala o configura las herramientas de compilación del SDK. |
NDK | N/A | 21.4.7075529 | Instala o configura una versión diferente del NDK. |
JDK | 11 | 11 | Para obtener más información, consulta cómo configurar la versión de JDK. |
Se requiere JDK 11 para ejecutar AGP 7.0
Cuando usas el complemento de Android para Gradle 7.0 para compilar tu app, JDK 11 ahora necesarias para ejecutar Gradle. Android Studio Arctic Fox incluye JDK 11 y configura Gradle para usarlo de forma predeterminada, lo que significa que la mayoría de los los usuarios no necesitan realizar cambios en la configuración de sus proyectos.
Si necesitas configurar manualmente Versión de JDK que usa AGP dentro de Android Studio, debes usar JDK 11. o una superior.
Cuando uses AGP independiente de Android Studio, actualiza la versión de JDK de la siguiente manera:
Configura la variable de entorno JAVA_HOME.
o la opción de línea de comandos -Dorg.gradle.java.home
al directorio de instalación de JDK 11.
Ten en cuenta que SDK Manager y el Administrador de AVD en el paquete de herramientas del SDK obsoleto no funcionan con el JDK 11. Para seguir usando SDK Manager y el Administrador de AVD con AGP 7.0 y versiones posteriores, debes cambiar a las versiones nuevas de las herramientas en actual Herramientas de línea de comandos del SDK de Android paquete.
API de variantes estable
La nueva API de variantes ahora es estable. Consulta las nuevas interfaces en la com.android.build.api.variant el paquete, y los ejemplos en el Proyecto gradle-recipes de GitHub. Como parte del nuevo de variantes, pusimos a disposición varios archivos intermedios, llamados artefactos, mediante Artefactos interfaz de usuario. Esos artefactos, como el manifiesto fusionado, pueden obtenerse y personalizarse con complementos y código de terceros.
Agregaremos nuevas funcionalidades para seguir ampliando la API de Variant. y aumentar la cantidad de artefactos intermedios que ponemos a disposición personalización.
Cambios de comportamiento de lint
En esta sección, se describen varios cambios de comportamiento de Lint en Android Gradle. plugin 7.0.0.
Lint mejorado para dependencias de biblioteca
Ahora lint se ejecuta con checkDependencies = true
más rápido.
que antes. Para proyectos de Android que consistan en una app con biblioteca
las dependencias, se recomienda configurar checkDependencies
como
true
como se muestra a continuación y para ejecutar lint mediante
./gradlew :app:lint
, que analizará todas las dependencias
módulos en paralelo y producir un único informe con los problemas del
la aplicación y todas sus dependencias.
Groovy
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Las tareas de lint ahora pueden estar actualizadas
Si las fuentes y los recursos de un módulo no cambiaron, el análisis de lint
del módulo no necesita ejecutarse de nuevo. Cuando esto sucede, el
la ejecución de la tarea aparece como “UP-TO-DATE” en Gradle
salida. Con este cambio, cuando se ejecuta lint en un módulo de aplicación con checkDependencies = true
, solo los módulos que cambiaron
necesitan para ejecutar sus análisis. Como resultado, lint puede ejecutarse aún más rápido.
Tampoco se debe ejecutar la tarea de informe de lint si sus entradas cambió. Un problema conocido relacionado es que no hay lint. resultado de texto impreso en stdout cuando la tarea lint está UP-TO-DATE (problema #191897708).
Cómo ejecutar lint en módulos de funciones dinámicas
AGP ya no permite ejecutar lint desde módulos de funciones dinámicas.
Si ejecutas lint desde el módulo de aplicaciones correspondiente, se ejecutará en
sus módulos de funciones dinámicas e incluyen todos los errores en el código de lint de la app
. Un problema conocido relacionado es que, cuando se ejecuta lint,
con checkDependencies = true
desde un módulo de app
no se verifican las dependencias de la biblioteca de funciones dinámicas, a menos que también sean apps
las dependencias (problema
#191977888).
Cómo ejecutar lint solo en la variante predeterminada
Cuando se ejecuta ./gradlew :app:lint
, ahora lint solo se ejecuta para los
como la variante predeterminada. En las versiones anteriores de AGP, lint se ejecutaba para todos los
variantes.
Advertencias de clases faltantes en el reductor R8
R8 con mayor precisión y
maneja de forma coherente las clases faltantes y la opción -dontwarn
.
Por lo tanto, debes comenzar a evaluar las advertencias de clases faltantes que se emitieron
por R8.
Cuando R8 encuentra una referencia de clase que no está definida en tu app o una de sus dependencias, emitirá una advertencia que aparecerá en tu compilación salida. Por ejemplo:
R8: Missing class: java.lang.instrument.ClassFileTransformer
Esta advertencia significa que la definición de la clase
No se pudo encontrar java.lang.instrument.ClassFileTransformer
cuando analices el código de tu app. Si bien esto suele significar
que hay un error,
es posible que quiera ignorar esta advertencia. Dos motivos comunes
para ignorar la advertencia:
-
Las bibliotecas que se orientan a la JVM y la clase faltante son de JVM (como en el ejemplo anterior).
-
Una de tus dependencias usa una API de solo tiempo de compilación.
Para ignorar una advertencia de clase faltante, agrega un -dontwarn
a tu archivo proguard-rules.pro
. Por ejemplo:
-dontwarn java.lang.instrument.ClassFileTransformer
Para mayor comodidad, AGP generará un archivo que contenga todas las
reglas faltantes y las escribes en una ruta de archivo como la siguiente:
app/build/outputs/mapping/release/missing_rules.txt
Agrega el
reglas a tu archivo proguard-rules.pro
para ignorar las advertencias.
En AGP 7.0, los mensajes de clase faltantes aparecerán como advertencias, y puedes
convertirlos en errores estableciendo
android.r8.failOnMissingClasses = true
in
gradle.properties
En AGP 8.0, estas advertencias se convertirán en
errores que dañan tu compilación. Es posible mantener el comportamiento de AGP 7.0 si haces lo siguiente:
agregando la opción -ignorewarnings
a tu
proguard-rules.pro
, pero no se recomienda.
Se quitó la caché de compilación del complemento de Android para Gradle
Se quitó la caché de compilación de AGP en AGP 4.1. Introducida anteriormente en AGP 2.3 para complementar la caché de compilación de Gradle, se reemplazó la caché de compilación de AGP. por completo a través de la caché de compilación de Gradle en AGP 4.1. Este cambio no afecta tiempo de compilación.
En AGP 7.0, la propiedad android.enableBuildCache
,
propiedad android.buildCacheDir
y el
Se quitó cleanBuildCache
tarea.
Usa el código fuente de Java 11 en tu proyecto
Ahora puedes compilar código fuente hasta Java 11 en el proyecto de tu app, lo que permite nuevas funciones del lenguaje, como los métodos de interfaz privada, el ícono para clases anónimas, y sintaxis de variables locales para parámetros lambda.
Para habilitar esta función, establece compileOptions
en los valores deseados
Versión de Java y establece compileSdkVersion
en 30 o superior:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
Se quitaron las configuraciones de dependencias
En AGP 7.0, se agregaron los siguientes parámetros de configuración (o permisos de dependencias) quitada:
-
compile
Según el caso de uso, esto se reemplazó porapi
oimplementation
.
También se aplica a las variantes *Compile. Por ejemplo:debugCompile
. -
provided
Se reemplazó porcompileOnly
.
También se aplica a las variantes *Proporcionadas, por ejemplo:releaseProvided
-
apk
Se reemplazó porruntimeOnly
. -
publish
Se reemplazó porruntimeOnly
.
En la mayoría de los casos, el AGP El Asistente de actualización migrará automáticamente tu proyecto a la nueva parámetros de configuración.
Cambio de ruta de clase cuando compilas con Android complemento de Gradle
Si compilas con el complemento de Android para Gradle, tu compilación
la ruta de clase puede cambiar. Debido a que AGP ahora usa api/implementation
.
de configuración de forma interna, es posible que se quiten algunos artefactos de la compilación
de clase. Si dependes de una dependencia de AGP durante el tiempo de compilación, asegúrate de
agregarlo como una dependencia explícita.
Adición de bibliotecas nativas a recursos de Java La carpeta no es compatible.
Anteriormente, se podía agregar una biblioteca nativa en una carpeta de recursos de Java y
registra la carpeta con android.sourceSets.main.resources.srcDirs
para que la biblioteca nativa se extraiga y se agregue a la biblioteca
APK A partir de AGP 7.0, no se admite, y las bibliotecas nativas no se admiten en un
Se ignoran la carpeta de recursos de Java. En su lugar, usa el método DSL diseñado para
bibliotecas nativas, android.sourceSets.main.jniLibs.srcDirs
. Para
más información, consulta
cómo configurar
conjuntos de orígenes.
Problemas conocidos
En esta sección, se describen los problemas conocidos relacionados con el complemento de Android para Gradle 7.0.0.
Incompatibilidad con el complemento multiplataforma 1.4.x de Kotlin
El complemento de Android para Gradle 7.0.0 es compatible con Kotlin Complemento multiplataforma 1.5.0 y posterior. Proyectos que usan Kotlin La compatibilidad multiplataforma debe actualizarse a Kotlin 1.5.0 para usar Android Gradle Complemento 7.0.0. Como solución alternativa, puedes cambiar el complemento de Android para Gradle a una versión inferior. a 4.2.x, aunque no se recomienda.
Para obtener más información, consulta KT-43944
Falta el resultado de lint
No hay resultados de texto de lint impresos en stdout cuando la tarea de lint está actualizado (problema #191897708). Para obtener más información, consulta Cambios de comportamiento de lint. Esta edición se corregirá en el complemento de Android para Gradle 7.1.
No se realizó la verificación de lint de todas las dependencias de la biblioteca de funciones dinámicas
Cuando ejecutas lint con checkDependencies = true
desde una
del módulo de la app, no se verifican las dependencias de la biblioteca de funciones dinámicas, a menos que
también son dependencias de la app
(problema #191977888).
Como solución alternativa, la tarea de lint se puede ejecutar en esas bibliotecas. Para obtener más contexto,
Consulta Cambios de comportamiento de lint.