Plug-in Android per Gradle 7.1.0 (gennaio 2022)

Il plug-in Android per Gradle 7.1.0 è una release principale che include una serie di nuove funzionalità e miglioramenti.

7.1.3 (aprile 2022)

Questo aggiornamento secondario include le seguenti correzioni di bug:

  • Problemi di classi duplicate segnalati da R8

Per un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog Android Studio Bumblebee Patch 3.

7.1.2 (febbraio 2022)

Questo aggiornamento secondario include le seguenti correzioni di bug:

  • Il plug-in Android per Gradle 7.1.0-rc01 non esegue la trasformazione del bytecode ASM durante i test delle unità
  • La sincronizzazione di Gradle non riesce con il messaggio "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'."
  • Alcuni nuovi blocchi DSL non possono essere utilizzati da Groovy DSL nel plug-in Android per Gradle Plugin 7.0.0
  • Nuova API di pubblicazione AGP 7.1: il file JAR Javadoc creato non viene firmato
  • ClassesDataSourceCache deve utilizzare l'ultima versione di Asm
  • Android Studio Bumblebee non esegue sempre il deployment delle ultime modifiche

Per un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog Android Studio Bumblebee Patch 2.

7.1.1 (febbraio 2022)

Questo aggiornamento secondario corrisponde alla release di Android Studio Bumblebee Patch 1.

Per un elenco delle correzioni di bug incluse in questa release, consulta il post del blog Android Studio Bumblebee Patch 1.

Compatibilità

Versione minima Versione predefinita Note
Gradle 7.2 7.2 Per saperne di più, consulta la sezione Aggiornare Gradle.
Strumenti di build dell'SDK 30.0.3 30.0.3 Installa o configura gli strumenti di compilazione dell'SDK.
NDK N/A 21.4.7075529 Installa o configura una versione diversa dell'NDK.
JDK 11 11 Per saperne di più, consulta la sezione Impostare la versione JDK.

L'attività di analisi Lint è ora memorizzabile nella cache

Il AndroidLintAnalysisTask è ora compatibile con la cache di build di Gradle. Se abiliti la cache di build impostando org.gradle.caching=true nel file gradle.properties , l'attività di analisi Lint otterrà l'output dalla cache di build, se possibile.

L'attività di analisi Lint è spesso il collo di bottiglia più grande quando si esegue Lint con il plug-in Android per Gradle, quindi l'abilitazione della cache di build migliora la velocità di build quando si esegue Lint in molte situazioni. Dovresti notare un miglioramento significativo delle prestazioni, ad esempio se hai un progetto multi-modulo e pulisci la directory di build prima di eseguire Lint sul server di integrazione continua.

I moduli C/C++ ora possono fare riferimento ad altri moduli C/C++ in nello stesso progetto

Un modulo Gradle Android con codice C/C++ ora può essere configurato per fare riferimento a file di intestazione e codice della libreria in un altro modulo Gradle. Il protocollo Prefab viene utilizzato per comunicare le intestazioni e le librerie tra i moduli Gradle.

Requisiti

  • Il modulo consumer deve essere CMake e non ndk-build. Il supporto per ndk-build richiederà un futuro aggiornamento dell'NDK. Il modulo publisher può essere CMake o ndk-build.

  • Il modulo consumer deve abilitare prefab in the build.gradle file.

android {
  buildFeatures {
    prefab true
  }
}
  • Il modulo publisher deve abilitare prefabPublishing nel file build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Il modulo consumer deve fare riferimento al modulo publisher aggiungendo una riga nel blocco dependencies del file build.gradle. Ad esempio:
dependencies {
  implementation project(':mylibrary')
}
  • Il modulo publisher deve esporre un pacchetto utilizzando una prefab sezione. Ad esempio:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Il file CMakeLists.txt del modulo consumer può utilizzare find_package() per individuare il pacchetto pubblicato dal modulo di produzione. Ad esempio:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Per ulteriori spiegazioni su come configurare i consumer e i producer AAR nativi con AGP, consulta Dipendenze native con AGP.

Impostazioni del repository nel file settings.gradle

Quando viene creato un nuovo progetto in Android Studio Bumblebee, il file di primo livello build.gradle contiene il blocco plugins, seguito dal codice per pulire la directory di build:

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
}

Le impostazioni del repository che in precedenza si trovavano nel file di primo livello build.gradle ora si trovano nel file settings.gradle:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

Il file build.gradle a livello di modulo non è stato modificato. Pertanto, utilizza il file build.gradle di primo livello e il file settings.gradle per definire le configurazioni di build che si applicano a tutti i moduli del progetto o ai repository e alle dipendenze che si applicano a Gradle stesso; utilizza il file build.gradle a livello di modulo per definire le configurazioni di build specifiche per un determinato modulo all'interno del progetto.

Riduttore di risorse migliorato

Android Studio Bumblebee include un riduttore di risorse migliorato che aiuta a ridurre le dimensioni dell'app.

Supporto per le app con funzionalità dinamiche

L'implementazione predefinita del riduttore di risorse Android è stata aggiornata nel plug-in Android per Gradle 7.1.0-alpha09. La nuova implementazione supporta la riduzione delle app con funzionalità dinamiche.

Ulteriori riduzioni sperimentali delle dimensioni dell'app

La nuova implementazione del riduttore di risorse può ridurre ulteriormente le dimensioni dell'app ridotta modificando la tabella delle risorse per rimuovere le risorse di valore inutilizzate e i riferimenti alle risorse di file inutilizzate. Il nuovo riduttore di risorse può eliminare completamente le risorse di file inutilizzate, riducendo ulteriormente le dimensioni dell' app. Questo comportamento non è ancora abilitato per impostazione predefinita, ma puoi attivarlo per provarlo aggiungendo l'opzione sperimentale android.experimental.enableNewResourceShrinker.preciseShrinking=true al file gradle.properties del progetto.

Segnala eventuali problemi riscontrati con il nuovo riduttore di risorse o il flag sperimentale. Per diagnosticare i problemi o come soluzione alternativa temporanea, puoi tornare all'implementazione precedente aggiungendo android.enableNewResourceShrinker=false al file gradle.properties del progetto. Il nuovo riduttore sostituisce le risorse basate su file inutilizzate con file minimi leggermente diversi rispetto al riduttore di risorse precedente, ma non è previsto alcun impatto sul runtime.

La rimozione della vecchia implementazione è prevista nel plug-in Android per Gradle 8.0.0.

Pubblicazione della variante di compilazione

Il plug-in Android per Gradle 7.1.0 e versioni successive consente di configurare le varianti di build da pubblicare in un repository Apache Maven. AGP crea un componente con una o più varianti di build in base alla nuova DSL di pubblicazione, che puoi utilizzare per personalizzare una pubblicazione in un repository Maven. Rispetto alle versioni precedenti, questo evita anche lavoro non necessario, poiché per impostazione predefinita non verranno creati componenti. Per saperne di più, consulta l'esempio di codice di pubblicazione.

Pubblicare il file JAR Javadoc

AGP 7.1.0 e versioni successive consente di generare Javadoc da origini Java e Kotlin e di pubblicare file JAR Javadoc oltre agli AAR per i progetti di libreria. Javadoc viene aggiunto ai file POM e ai file di metadati del modulo Gradle{:.external} . Per abilitare questa funzionalità, aggiungi withJavadocJar() nel singleVariant o multipleVariants blocco di pubblicazione. Per saperne di più, consulta l' esempio di codice delle opzioni di pubblicazione.

Pubblicare il file JAR delle origini

AGP 7.1.0 e versioni successive consente di pubblicare file JAR di origine Java e Kotlin oltre agli AAR per i progetti di libreria. Le origini vengono aggiunte ai file POM e ai file di metadati del modulo Gradle{:.external}. Puoi abilitare questa funzionalità aggiungendo withSourcesJar() nel singleVariant o multipleVariants blocco di pubblicazione. Per saperne di più, consulta l' esempio di codice delle opzioni di pubblicazione.

Modifica semantica del blocco Lint

Tutti i metodi Lint che sostituiscono il livello di gravità specificato di un problema—enable, disable/ignore, informational, warning, error, fatal—ora rispettano l'ordine di configurazione. Ad esempio, l'impostazione di un problema come fatale in finalizeDsl() ora sostituisce la disattivazione nel DSL principale. Per saperne di più, consulta la documentazione di riferimento del lint{} blocco e Flusso di build ed estensioni di Android.

Le API AGP da cui dipende il plug-in Gradle Navigation Safe Args sono state rimosse. AGP 7.1 non funziona con le versioni 2.4.0-rc1 o 2.4.0 di Navigation Safe Args, ma funzionerà con le versioni 2.5.0-alpha01 e 2.4.1. Nel frattempo, come soluzione alternativa, puoi utilizzare AGP 7.1 con una build di snapshot di Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. Per utilizzare la build di snapshot, segui le istruzioni relative agli snapshot con l'ID build n. 8054565.

Inoltre, le versioni 2.4.1 e 2.5.0 di Navigation Safe Args non funzioneranno più con AGP 4.2; per utilizzare queste versioni di Safe Args, devi utilizzare AGP 7.0 e versioni successive.

Disattivare la creazione automatica dei componenti

A partire da AGP 8.0, la creazione automatica dei componenti sarà disattivata per impostazione predefinita. Attualmente, AGP 7.1 crea automaticamente un componente per ogni variante di compilazione, che ha lo stesso nome della variante di compilazione, e un componente all che contiene tutte le varianti di compilazione. Questa creazione automatica dei componenti verrà disattivata. Per passare al nuovo comportamento, devi disattivare manualmente la creazione automatica dei componenti impostando android.disableAutomaticComponentCreation su true. Per saperne di più, consulta Utilizzare il plug-in Maven Publish.

Compatibilità con Firebase Performance Monitoring

AGP 7.1 non è compatibile con il plug-in Gradle di Firebase Performance Monitoring versione 1.4.0 e precedenti. L'assistente per l'upgrade di AGP non aggiornerà automaticamente il plug-in alla versione 1.4.1, quindi se utilizzi firebase-perf e vuoi eseguire l'upgrade di AGP alla versione 7.1, devi eseguire questo upgrade specifico manualmente.

Problemi noti

Questa sezione descrive i problemi noti esistenti nel plug-in Android per Gradle 7.1.0.

Problemi con i test delle unità di un progetto di app che utilizza il plug-in Hilt

Il classpath dei test delle unità contiene le classi dell'app non strumentate, il che significa che Hilt non strumenta le classi dell'app per gestire l'iniezione delle dipendenze durante l'esecuzione dei test delle unità.

Questo problema verrà risolto con la release 7.1.1, vedi il problema n. 213534628.