Complemento de Android para Gradle 7.1.0 (enero de 2022)
El complemento de Android para Gradle 7.1.0 es una actualización importante que incluye una variedad de funciones y mejoras nuevas.
7.1.3 (abril de 2022)
Esta actualización menor incluye las siguientes correcciones de errores:
- Problemas de clases duplicados informados por R8
Para ver una lista completa de las correcciones de errores que se incluyen en esta versión, consulta la entrada de blog del Parche 3 de Android Studio Bumblebee.
7.1.2 (febrero de 2022)
Esta actualización menor incluye las siguientes correcciones de errores:
- El complemento de Gradle para Android 7.1.0-rc01 no realiza la transformación del código de bytes ASM durante las pruebas de unidades.
- La sincronización de Gradle falla y muestra "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'".
- No se pueden usar algunos bloques de DSL nuevos de Groovy DSL en complemento de Android para Gradle 7.0.0.
- La nueva API de publicación de AGP 7.1: el jar de javadoc no se firma.
- ClassesDataSourceCache debe usar la última versión de Asm.
- Android Studio BumbleBee no siempre implementa los cambios más recientes.
Para ver una lista completa de las correcciones de errores que se incluyen en esta versión, consulta la entrada de blog del Parche 2 de Android Studio Bumblebee.
7.1.1 (febrero de 2022)
Esta actualización menor corresponde al lanzamiento del Parche 1 de Android Studio Bumblebee.
Para ver una lista de las correcciones de errores que se incluyen en esta versión, consulta la entrada de blog del Parche 1 de Android Studio Bumblebee.
Compatibilidad
Versión mínima | Versión predeterminada | Notas | |
---|---|---|---|
Gradle | 7.2 | 7.2 | Para obtener más información, consulta cómo actualizar Gradle. |
Herramientas de desarrollo del SDK | 30.0.3 | 30.0.3 | 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. |
La tarea de análisis de lint ahora se puede almacenar en caché
El objeto AndroidLintAnalysisTask
ahora es compatible con la caché de compilación de Gradle. Si para habilitar la caché de compilación configuras org.gradle.caching=true
en tu archivo gradle.properties
, la tarea de análisis de lint obtendrá su resultado de la caché de compilación cuando sea posible.
La tarea de análisis de lint es con frecuencia el mayor cuello de botella cuando se ejecuta lint con el complemento de Android para Gradle. Por eso, habilitar la caché de compilación mejora la velocidad de compilación cuando se ejecuta lint en muchas situaciones. Deberías ver una mejora notable en el rendimiento, por ejemplo, si tienes un proyecto de varios módulos y limpias el directorio de compilación antes de ejecutar lint en tu servidor de CI.
Los módulos de C/C++ ahora pueden hacer referencia a otros módulos de C/C++ del mismo proyecto
Un módulo de Android para Gradle con código C/C++ ahora se puede configurar para hacer referencia a archivos de encabezado y código de biblioteca en otro módulo de Gradle. El protocolo Prefab se usa para comunicar los encabezados y las bibliotecas entre módulos de Gradle.
Requisitos
-
El módulo consuming debe ser
CMake
y nondk-build
. La compatibilidad con ndk-build requerirá una actualización futura del NDK. El módulo publishing puede serCMake
ondk-build
. -
El módulo consuming debe habilitar
prefab
en el archivobuild.gradle
.
android {
buildFeatures {
prefab true
}
}
- El módulo publishing debe habilitar
prefabPublishing
en el archivobuild.gradle
.
android {
buildFeatures {
prefabPublishing true
}
}
- El módulo consuming debe hacer referencia al módulo publishing cuando se agrega una línea en el bloque
dependencies
del archivobuild.gradle
. Por ejemplo:
dependencies {
implementation project(':mylibrary')
}
- El módulo publishing debe exponer un paquete mediante una sección
prefab
. Por ejemplo:
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}
- El archivo
CMakeLists.txt
del módulo de consumo puede usarfind_package()
para ubicar el paquete publicado por el módulo de producción. Por ejemplo:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)
- Debe haber una STL para toda la aplicación. Por ejemplo, tanto los módulos de consumo como los de publicación pueden usar la STL compartida de C++.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}
Para obtener una explicación más detallada sobre cómo configurar consumidores y productores de AAR nativos con AGP, consulta Dependencias nativas con AGP.
Configuración del repositorio en el archivo settings.gradle
Cuando se crea un proyecto nuevo en Android Studio Bumblebee, el archivo build.gradle
de nivel superior contiene el bloque plugins
, seguido del código para limpiar el directorio de compilación:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
La configuración del repositorio que antes estaba en el archivo build.gradle
de nivel superior ahora está en el archivo settings.gradle
:
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'
El archivo build.gradle
de nivel de módulo no cambió. Por lo tanto, usa el archivo build.gradle
de nivel superior y el archivo settings.gradle
para definir las configuraciones de compilación que se aplican a todos los módulos de tu proyecto, o los repositorios y las dependencias que se aplican a Gradle. Usa el archivo build.gradle
de nivel de módulo para definir las configuraciones de compilación que son específicas de un módulo determinado dentro de tu proyecto.
Reductor de recursos mejorado
Android Studio Bumblebee incluye un reductor de recursos mejorado que ayuda a reducir el tamaño de tu app.
Compatibilidad con apps que tienen funciones dinámicas
Se actualizó la implementación predeterminada del reductor de recursos de Android en el complemento de Android para Gradle 7.1.0-alpha09. La implementación nueva admite la reducción de apps con funciones dinámicas.
Reducciones adicionales y experimentales del tamaño de la app
La nueva implementación del reductor de recursos puede reducir aún más el tamaño de la app reducida si modificas la tabla de recursos para quitar los recursos de valor que no se usan y las referencias a los recursos de archivos no usados. El nuevo reductor de recursos puede borrar por completo recursos de archivos no utilizados, lo que reduce aún más el tamaño de la app. Este comportamiento aún no está habilitado de forma predeterminada, pero puedes probarlo. Para ello, agrega la opción experimental android.experimental.enableNewResourceShrinker.preciseShrinking=true
al archivo gradle.properties
del proyecto.
Informa cualquier problema que tengas con el reductor de recursos nuevo o la marca experimental. Para ayudarte a diagnosticar problemas o como una solución temporal, puedes volver a la implementación anterior. Para ello, agrega android.enableNewResourceShrinker=false
al gradle.properties
de tu proyecto.
El reductor nuevo reemplaza los recursos basados en archivos sin usar por archivos mínimos ligeramente diferentes a los del reductor de recursos anterior. No se espera que esto afecte el tiempo de ejecución.
Se programó la eliminación de la implementación anterior en el complemento de Android para Gradle 8.0.0.
Publicación de variantes de compilación
El complemento de Android para Gradle 7.1.0 y versiones posteriores te permiten configurar qué variantes de compilación publicar en un repositorio de Maven de Apache. AGP crea un componente con una o varias variantes de compilación basadas en el nuevo DSL de publicación, que puedes usar para personalizar una publicación en un repositorio de Maven. En comparación con las versiones anteriores, esto también evita el trabajo innecesario, ya que no se crearán componentes de forma predeterminada. Para obtener más información, consulta la muestra de código de publicación.
Publicación del JAR de Javadoc
AGP 7.1.0 y versiones posteriores te permiten generar Javadoc desde fuentes Java y Kotlin, y publicar archivos JAR de Javadoc, además de AAR para proyectos de biblioteca. Se agrega Javadoc a los archivos de POM y metadatos del módulo Gradle{:.external}. Para habilitar esta función, agrega withJavadocJar()
en el bloque de publicación singleVariant
o multipleVariants
.
Para obtener más información, consulta la muestra de código de opciones de publicación.
Publicación de fuentes de JAR
AGP 7.1.0 y versiones posteriores te permiten publicar archivos JAR de origen de Java y Kotlin, además de AARs para proyectos de biblioteca. Las fuentes se agregan a los archivos de POM y metadatos del módulo Gradle{:.external}. Para habilitar esta función, agrega withSourcesJar()
en el bloque de publicación singleVariant
o multipleVariants
. Para obtener más información, consulta la muestra de código de opciones de publicación.
Cambio semántico del bloque lint
Todos los métodos de lint que anulan el nivel de gravedad de un problema (enable
, disable
/ignore
, informational
, warning
, error
, fatal
) ahora respetan el orden de configuración. Por ejemplo, si se configura un problema como fatal en finalizeDsl()
, ahora se anula la inhabilitación en el DSL principal. Para obtener más información, consulta los documentos de referencia del bloque lint{}
y los puntos de extensión y flujo de la compilación de Android.
Compatibilidad con Navigation Safe Args
Se quitaron las APIs de AGP de las que dependen el complemento de Gradle para Navigation Safe Args. AGP 7.1 no funciona con las versiones 2.4.0-rc1 o 2.4.0 de Navigation Safe Args, pero funcionará con las versiones 2.5.0-alpha01 y 2.4.1. Mientras tanto, como solución alternativa, puedes usar AGP 7.1 con una compilación de resúmenes de Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. Para usar la compilación de resúmenes, sigue las instrucciones del resumen con el ID de compilación #8054565.
Además, las versiones 2.4.1 y 2.5.0 de Navigation Safe Args ya no funcionarán con AGP 4.2. Para usar esas versiones de Safe Args, debes usar AGP 7.0 y versiones posteriores.
Inhabilita la creación automática de componentes
A partir de AGP 8.0, se inhabilitará de forma predeterminada la creación automática de componentes.
En la actualidad, AGP 7.1 crea automáticamente un componente para cada variante de compilación, que tiene el mismo nombre que la variante de compilación, y un componente all
que contiene todas las variantes de compilación. Esta creación automática de componentes se inhabilitará. Para realizar la transición al nuevo comportamiento, debes inhabilitar de forma manual la creación automática de componentes con la configuración de android.disableAutomaticComponentCreation
en true.
. Si quieres obtener más información, consulta Cómo usar el complemento de Maven Publish.
Compatibilidad con Firebase Performance Monitoring
AGP 7.1 no es compatible con la versión 1.4.0 del complemento de Gradle de Firebase Performance Monitoring y versiones anteriores. El Asistente de actualización de AGP no actualizará de automáticamente el complemento a la versión 1.4.1, por lo que, si usas firebase-perf
y deseas actualizar AGP a la versión 7.1, debes realizar esta actualización específica de forma manual.
Problemas conocidos
En esta sección, se describen los problemas conocidos presentes en el complemento de Android para Gradle 7.1.0.
Problemas con la prueba de unidades de un proyecto de app que usa el complemento de Hilt
La ruta de clase de la prueba de unidades contiene las clases de apps no instrumentadas, lo que significa que Hilt no instrumenta las clases de la app para controlar la inserción de dependencias cuando se ejecutan pruebas de unidades.
Este problema se solucionará en la versión 7.1.1. Consulta el error #213534628.