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 visualizzare un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog sulla patch 3 di Android Studio Bumblebee.

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 riesce a eseguire la trasformazione del bytecode ASM durante i test delle unità
  • La sincronizzazione di Gradle non riesce e viene visualizzato il messaggio "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'."
  • Alcuni nuovi blocchi DSL non possono essere utilizzati dalla DSL Groovy nel plug-in Android per Gradle 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 visualizzare un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog sulla patch 2 di Android Studio Bumblebee.

7.1.1 (febbraio 2022)

Questo aggiornamento secondario corrisponde al rilascio di Android Studio Bumblebee Patch 1.

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

Compatibilità

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

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

AndroidLintAnalysisTask ora è compatibile con la cache di build 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 quando possibile.

L'attività di analisi lint è spesso il collo di bottiglia più grande quando si esegue lint con il plug-in Android Gradle, quindi l'attivazione 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 multimodulo e pulisci la directory di build prima di eseguire lint sul server CI.

Ora i moduli C/C++ possono fare riferimento ad altri moduli C/C++ nello stesso progetto.

Ora è possibile configurare un modulo Gradle Android con codice C/C++ in modo che faccia riferimento ai file di intestazione e al 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 consuming deve essere CMake e non ndk-build. Il supporto di ndk-build richiederà un futuro aggiornamento dell'NDK. Il modulo publishing può essere CMake o ndk-build.

  • Il modulo consuming deve attivare prefab nel file build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Il modulo publishing deve abilitare prefabPublishing nel file build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Il modulo consuming deve fare riferimento al modulo publishing aggiungendo una riga nel blocco dependencies del file build.gradle. Ad esempio:
dependencies {
  implementation project(':mylibrary')
}
  • Il modulo publishing deve esporre un pacchetto utilizzando una sezione prefab. Ad esempio:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Il file CMakeLists.txt del modulo di consumo potrebbe 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 produttori 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 build.gradle di primo livello 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 build.gradle di primo livello 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 è cambiato. 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 oppure i repository e le 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.

Riduzione delle risorse migliorata

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

Supporto per app con funzionalità dinamiche

L'implementazione predefinita di Android resource shrinker è 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 di riduzione delle risorse può ridurre ulteriormente le dimensioni dell'app ridotta modificando la tabella delle risorse per rimuovere le risorse di valori non utilizzate e i riferimenti alle risorse di file non utilizzate. Il nuovo strumento di riduzione delle risorse può eliminare completamente le risorse dei file inutilizzati, riducendo ulteriormente le dimensioni della tua 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 tuo progetto.

Segnala eventuali problemi riscontrati con il nuovo strumento di riduzione delle risorse o con il flag sperimentale. Per facilitare la diagnosi dei problemi o come soluzione 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 minimali leggermente diversi rispetto al riduttore di risorse precedente, ma non è previsto alcun impatto sul runtime.

La vecchia implementazione verrà rimossa nel plug-in Android per Gradle 8.0.0.

Compilare la pubblicazione delle varianti

Il plug-in Android per Gradle 7.1.0 e versioni successive ti 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 al nuovo DSL di pubblicazione, che puoi utilizzare per personalizzare una pubblicazione in un repository Maven. Rispetto alle versioni precedenti, in questo modo si evita anche lavoro inutile, in quanto non verranno creati componenti per impostazione predefinita. Per saperne di più, consulta l'esempio di codice di pubblicazione.

Pubblica JAR Javadoc

AGP 7.1.0 e versioni successive consentono di generare Javadoc da sorgenti Java e Kotlin e pubblicare file JAR Javadoc oltre agli AAR per i progetti di libreria. La documentazione Javadoc viene aggiunta al file POM e ai file Gradle Module Metadata{:.external}. Attiva questa funzionalità aggiungendo withJavadocJar() nel blocco singleVariant o multipleVariants. Per saperne di più, consulta l'esempio di codice delle opzioni di pubblicazione.

Pubblica JAR delle origini

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

Modifica semantica del blocco lint

Tutti i metodi di 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 lint{} documentazione di riferimento sui blocchi e flusso di build e punti di estensione di Android.

Le API AGP da cui dipende il plug-in Gradle Safe Args per la navigazione sono state rimosse. AGP 7.1 non funziona con le versioni 2.4.0-rc1 o 2.4.0 di Navigation Safe Args, ma funziona con le versioni 2.5.0-alpha01 e 2.4.1. Nel frattempo, come soluzione alternativa, puoi utilizzare AGP 7.1 con una build snapshot di Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. Per utilizzare la build dello snapshot, segui le istruzioni per lo snapshot con l'ID build 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 di componenti

A partire da AGP 8.0, la creazione automatica dei componenti verrà disattivata per impostazione predefinita. Al momento, AGP 7.1 crea automaticamente un componente per ogni variante di build, che ha lo stesso nome della variante di build, e un componente all che contiene tutte le varianti di build. Questa creazione automatica dei componenti verrà disattivata. Per eseguire la transizione al nuovo comportamento, devi disattivare manualmente la creazione automatica dei componenti impostando android.disableAutomaticComponentCreation su true.. Per ulteriori informazioni, vedi Utilizzare il plug-in Maven Publish.

Compatibilità di 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 farlo manualmente.

Problemi noti

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

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

Il classpath del 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 problema n. 213534628.