Complemento de Android para Gradle 3.4.0 (abril de 2019)

Esta versión del complemento para Android requiere lo siguiente:

3.4.3 (julio de 2020)

Esta actualización menor es compatible con la nueva configuración predeterminada y las funciones para la visibilidad de los paquetes en Android 11.

Consulta las notas de la versión 4.0.1 para obtener más detalles.

3.4.2 (julio de 2019)

Esta actualización menor es compatible con Android Studio 3.4.2 e incluye varias correcciones de errores y mejoras de rendimiento. Para ver una lista de las correcciones de errores más importantes, consulta la publicación relacionada en el blog de actualizaciones de versiones.

3.4.1 (mayo de 2019)

Esta actualización menor es compatible con Android Studio 3.4.1 e incluye varias correcciones de errores y mejoras de rendimiento. Para ver una lista de las correcciones de errores más importantes, consulta la publicación relacionada en el blog de actualizaciones de versiones.

Funciones nuevas

  • Nuevas configuraciones de dependencia de comprobación de lint: Cambió el comportamiento de lintChecks y se introdujo una configuración de dependencia nueva, lintPublish, a fin de brindar mayor control sobre qué comprobaciones de lint se empaquetan en las bibliotecas de Android.

    • lintChecks: Esta es una configuración existente que debes usar para las comprobaciones de lint que solo deseas ejecutar cuando compilas el proyecto de forma local. Si anteriormente usabas la configuración de dependencia lintChecks para incluir comprobaciones de lint en el archivo AAR publicado, debes migrar esas dependencias a fin de usar la configuración de lintPublish nueva que se describe a continuación.
    • lintPublish: Usa esta configuración nueva en proyectos de biblioteca para las comprobaciones de lint que desees incluir en el archivo AAR publicado, como se muestra a continuación. Eso significa que los proyectos que consumen la biblioteca también aplican esas comprobaciones de lint.

    En la siguiente muestra de código, se usan ambas configuraciones de dependencia en un proyecto de biblioteca local de Android.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • En general, debería mejorar la velocidad de compilación para las tareas de empaquetado y firma. Si observas una regresión de rendimiento relacionada con esas tareas, informa el error.

Cambios en el comportamiento

  • Advertencia de baja del complemento de la función Apps instantáneas Android: Si todavía usas el complemento com.android.feature para compilar apps instantáneas, el complemento de Android para Gradle 3.4.0 te advertirá que aquel dejará de estar disponible. Para asegurarte de que podrás seguir compilando apps instantáneas en versiones futuras del complemento, migra tus apps con el complemento de funciones dinámicas, que también te permite publicar las experiencias de apps instantáneas e instaladas desde un único Android App Bundle.

  • R8 habilitado en la configuración predeterminada: R8 integra en un solo paso los procesos de expansión de sintaxis, reducción, ofuscación, optimización y conversión a DEX, lo que mejora notablemente el rendimiento de las compilaciones. R8 se presentó en el complemento de Android para Gradle 3.3.0 y ahora está habilitada de forma predeterminada para proyectos de bibliotecas de apps y Android que utilicen el complemento 3.4.0 y versiones posteriores.

En la siguiente imagen, se proporciona una descripción general del proceso de compilación antes de la incorporación de R8.

Antes de R8, ProGuard era un paso de compilación independiente de la conversión a dex y desugaring.

Con R8, ahora los procesos de expansión de sintaxis, reducción, ofuscación, optimización y conversión a DEX (D8) se completan en un único paso, como se muestra a continuación.

Con R8, los procesos de expansión de sintaxis, reducción, ofuscación, optimización y conversión a DEX se llevan a cabo en un único paso de compilación.

Ten en cuenta que R8 está diseñado para trabajar con las reglas de ProGuard existentes, de modo que es probable que R8 funcione correctamente sin necesidad de que realices ninguna acción. Sin embargo, dado que se trata de una tecnología diferente a la de ProGuard, diseñada específicamente para proyectos de Android, es posible que durante la reducción y la optimización se quite código que ProGuard no quitaría. Por lo tanto, en esta situación poco probable, es posible que sea necesario agregar reglas adicionales para mantener ese código en la compilación de salida.

Si tienes inconvenientes con el uso de R8, consulta las Preguntas frecuentes sobre la compatibilidad de R8 para comprobar si hay una solución a tu problema. Si no la hay, informa el error. Para inhabilitar R8, agrega una de las siguientes líneas al archivo gradle.properties de tu proyecto:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Nota: Para un tipo de compilación determinado, si configuras useProguard en false en el archivo build.gradle del módulo de la app, el complemento de Android para Gradle usará R8 a fin de reducir el código de la app para ese tipo de compilación, independientemente de si inhabilitas R8 en el archivo gradle.properties del proyecto.

  • ndkCompile dejó de estar disponible: Si intentas usar ndkBuild para compilar bibliotecas nativas, se mostrará un error de compilación. En su lugar, debes usar CMake o ndk-build para agregar código C y C++ a tu proyecto.

Errores conocidos

  • El uso correcto de nombres de paquetes únicos no se aplica actualmente, pero será más estricto en las versiones posteriores del complemento. En la versión 3.4.0 del complemento de Android para Gradle, puedes optar por comprobar si tu proyecto declara nombres de paquete aceptables. A tal fin, agrega la siguiente línea al archivo gradle.properties.

              android.uniquePackageNames = true
              
            

    Si necesitas obtener más información para configurar un nombre de paquete mediante el complemento de Android para Gradle, consulta Cómo establecer el ID de aplicación.