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 nuevas funciones y mejoras.

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
Gradle 7.2 7.2
Herramientas de desarrollo del SDK 30.0.3 30.0.3
NDK N/A 21.4.7075529
JDK 11 11

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 lo que 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 C/C++ ahora pueden hacer referencia a otros módulos 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 no ndk-build. La compatibilidad con ndk-build requerirá una actualización futura del NDK. El módulo publishing puede ser CMake o ndk-build.

  • El módulo consuming debe habilitar prefab en el archivo build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • El módulo publishing debe habilitar prefabPublishing en el archivo build.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 archivo build.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 usar find_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)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Para obtener una explicación más detallada sobre la configuración de 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 configuraciones de compilación que sean 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 que no se usan. 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 AARs 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. Si quieres 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. Si quieres 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 la 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.

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. Actualmente, 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 deseas 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á 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.

Errores 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 error se solucionará en la versión 7.1.1. Consulta el error #213534628.