Complemento de Android para Gradle 4.2.0 (marzo de 2021)
Compatibilidad
Versión mínima | Versión predeterminada | Notas | |
---|---|---|---|
Gradle | 6.7.1 | N/A | 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. |
Funciones nuevas
Esta versión del complemento de Android para Gradle incluye las siguientes funciones nuevas:
Versión 8 del lenguaje Java según la configuración predeterminada
A partir de la versión 4.2, el AGP usará el nivel de lenguaje Java 8 de forma predeterminada. Java 8 brinda acceso a varias funciones más recientes del lenguaje, como lambda. referencias de métodos y métodos de interfaz estáticos. Para ver la lista completa para conocer las funciones compatibles, consulta la documentación de Java 8.
Para mantener el comportamiento anterior, especifica Java 7 explícitamente en tu módulo
Archivo build.gradle.kts
o build.gradle
:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
Nuevo compilador de recursos JVM
Un nuevo compilador de recursos JVM del complemento de Android para Gradle 4.2 reemplaza partes del compilador de recursos AAPT2, posiblemente lo que mejora el rendimiento de la compilación, en especial en máquinas con Windows. La nueva JVM el compilador de recursos está habilitado de forma predeterminada.
Las firmas v3 y v4 ahora son compatibles
El complemento de Android para Gradle 4.2 ahora es compatible con el APK v3
y APK v4.
Para habilitar uno o ambos formatos en tu
agrega las siguientes propiedades a build.gradle
a nivel de módulo
o build.gradle.kts
:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}
// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}
La firma de APK v4 te permite implementar rápidamente APK grandes usando la biblioteca ADB Instalación incremental de APK en Android 11 Esta nueva marca se encarga del paso de la firma del APK en la implementación. el proceso de administración de recursos.
Cómo configurar la firma de apps por variante
Ahora es posible habilitar o inhabilitar la firma de apps en Gradle para Android. complemento por variante.
En este ejemplo, se muestra cómo configurar la firma de apps por variante con la
onVariants()
en Kotlin o Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
Nueva propiedad de Gradle:
android.native.buildOutput
Para reducir el desorden en el resultado de la compilación, AGP 4.2 filtra los mensajes.
de compilaciones nativas que usan CMake y ndk-build
,
Se muestra solo el resultado del compilador C/C++ de forma predeterminada. Anteriormente, una línea de salida
para cada archivo creado, lo que generó una gran cantidad
mensajes informativos.
Si quieres ver el resultado nativo completo, configura el nuevo
Propiedad de Gradle android.native.buildOutput
en verbose
.
Puedes configurar esta propiedad en el archivo gradle.properties
o mediante
la línea de comandos.
gradle.properties
android.native.buildOutput=verbose
Línea de comandos
-Pandroid.native.buildOutput=verbose
El valor predeterminado de esta propiedad es quiet
.
Cambio de comportamiento de los archivos gradle.properties
A partir de AGP 4.2, ya no es posible anular las propiedades de Gradle.
de los subproyectos. En otras palabras, si declaras una propiedad en una
gradle.properties
en un subproyecto en lugar de la raíz
proyecto, se ignorará.
Por ejemplo, en versiones anteriores, AGP leía valores de
<var>projectDir</var>/gradle.properties
,
<var>projectDir</var>/app/gradle.properties
,
<var>projectDir</var>/library/gradle.properties
,
Para módulos de apps, si la misma propiedad de Gradle estuviera presente en ambos
<var>projectDir</var>/gradle.properties
y
<var>projectDir</var>/app/gradle.properties
,
el valor de
<var>projectDir</var>/app/gradle.properties
tendría prioridad.
En AGP 4.2, se modificó este comportamiento, y AGP no cargará valores de
gradle.properties
en subproyectos (p.ej.,
<var>projectDir</var>/app/gradle.properties
).
Este cambio refleja el
nuevo comportamiento de Gradle y admite
almacenamiento en caché de configuración
Obtén más información para establecer valores en gradle.properties
de Terraform, consulta la
Documentos de Gradle.
Cambios en la compatibilidad y la configuración de Gradle
Cuando se ejecuta en Android Studio, la herramienta de compilación de Gradle usa el JDK incluído en el paquete de Studio. En las versiones anteriores, se empaquetaba el JDK 8 con Studio. Sin embargo, en 4.2, ahora se incluye el JDK 11. Cuando se ejecuta el nuevo JDK empaquetado con Gradle, es posible que se generen algunas incompatibilidades o se vea afectado el rendimiento de la JVM debido a los cambios en el recolector de elementos no utilizados. Estos errores se describen a continuación.
Nota: Si bien recomendamos ejecutar Gradle con JDK 11, es es posible cambiar el JDK que se usa para ejecutar Gradle en el Estructura del proyecto . Cambiar esta configuración solo cambiará el JDK que se usa para ejecutar Gradle. no cambiará el JDK que se usa para ejecutar Studio.
Compatibilidad de Studio con Android Complemento de Gradle (AGP)
Android Studio 4.2 puede abrir proyectos que usen AGP 3.1 y posterior, siempre que AGP ejecute Gradle 4.8.1 y versiones posteriores. Para ver más para obtener más información sobre la compatibilidad con Gradle, consulta Actualiza Gradle.
Cómo optimizar las compilaciones de Gradle para JDK 11
Esta actualización a JDK 11 afecta la configuración predeterminada de elementos no utilizados de JVM. ya que JDK 8 usa el recolector de elementos no utilizados paralelo, mientras que el JDK 11 usa el Recolector de elementos no utilizados G1.
Para mejorar potencialmente el rendimiento de la compilación, te recomendamos
probar tus compilaciones de Gradle con el
recolector de elementos no utilizados paralelo. En gradle.properties
, establece lo siguiente:
org.gradle.jvmargs=-XX:+UseParallelGC
Si ya hay otras opciones configuradas en este campo, agrega una opción nueva:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Para medir la velocidad de compilación con diferentes configuraciones, consulta Cómo generar un perfil para tu compilación.
Archivos DEX sin comprimir en APK cuando minSdk
es igual a 28 o superior
AGP ahora empaqueta archivos DEX sin comprimir en APK de forma predeterminada cuando minSdk
= 28 o
mayores. Esto provoca un aumento en el tamaño del APK, pero genera un menor
el tamaño de instalación en el dispositivo, y el tamaño de descarga es más o menos el mismo.
Para forzar que AGP empaquete los archivos DEX comprimidos en su lugar, puedes agregar el
siguiente a tu archivo build.gradle
:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Cómo usar el DSL para empaquetar bibliotecas nativas comprimidas
Recomendamos empaquetar las bibliotecas nativas
sin comprimir, ya que esto
se reduce el tamaño de instalación de la app, el tamaño de descarga y el tamaño de la app
el tiempo de carga
de los usuarios. Sin embargo, si quieres que el complemento de Android para Gradle
paquetes de bibliotecas nativas comprimidas cuando compilas tu app, establece
useLegacyPackaging
a true
en el archivo build.gradle
de tu app:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
La marca useLegacyPackaging
reemplaza el atributo del manifiesto extractNativeLibs
. Para obtener más información, consulta la nota de la versión
Bibliotecas nativas empaquetadas sin comprimir de forma predeterminada.