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 minore include le seguenti correzioni di bug:

  • Problemi relativi ai corsi duplicati segnalati da R8

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

7.1.2 (febbraio 2022)

Questo aggiornamento minore 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 di unità
  • La sincronizzazione di Gradle non riesce con il messaggio "Impossibile caricare la classe 'com.android.build.api.extension.AndroidComponentsExtension'."
  • Alcuni nuovi blocchi DSL non possono essere utilizzati dal DSL Groovy nel plug-in Android Gradle 7.0.0
  • Nuova API di pubblicazione di AGP 7.1: il file JAR javadoc creato non viene firmato
  • ClassesDataSourceCache deve utilizzare la versione più recente 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 relativo alla patch 2 di Android Studio Bumblebee.

7.1.1 (febbraio 2022)

Questo aggiornamento minore corrisponde al rilascio della patch 1 di Android Studio Bumblebee.

Per visualizzare un elenco delle correzioni di bug incluse in questa release, consulta il post del blog relativo al 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 compilazione dell'SDK.
NDK N/D 21.4.7075529 Installa o configura una versione diversa del NDK.
JDK 11 11 Per saperne di più, vedi Impostare la versione JDK.

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

AndroidLintAnalysisTask è ora compatibile con la cache di compilazione di Gradle. Se attivi la cache di compilazione impostando org.gradle.caching=true nel file gradle.properties , l'attività di analisi lint riceverà il relativo output dalla cache di compilazione, se possibile.

L'attività di analisi lint è spesso il principale collo di bottiglia quando esegui lint con il plug-in Gradle per Android, quindi l'attivazione della cache di compilazione migliora la velocità di compilazione quando esegui lint in molte situazioni. Dovresti notare un notevole miglioramento del rendimento, ad esempio se hai un progetto multi-modulo e pulisci la directory di compilazione 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 Android Gradle 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 di consumo deve essere CMake e non ndk-build. Il supporto di ndk-build richiederà un futuro aggiornamento dell'NDK. Il modulo pubblicazione può essere CMake o ndk-build.

  • Il modulo di utilizzo deve attivare prefab nel file build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Il modulo publishing deve attivare prefabPublishing nel file build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Il modulo di utilizzo deve fare riferimento al modulo di pubblicazione 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 di annunci di ricerca adattabili 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 ripulire la directory di compilazione:

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 è 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 o 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.

Riduttore delle risorse migliorato

Android Studio Bumblebee include uno strumento di riduzione delle risorse migliorato che consente di ridurre le dimensioni dell'app.

Supporto per le app con funzionalità dinamiche

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

Ulteriori riduzioni sperimentali delle dimensioni delle app

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

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

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

Creare la pubblicazione delle varianti

Il plug-in Android per Gradle 7.1.0 e versioni successive ti consente di configurare le varianti di compilazione da pubblicare in un repository Apache Maven. AGP crea un componente con una o più varianti di compilazione 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 un lavoro non necessario, in quanto non verranno creati componenti per impostazione predefinita. Per scoprire di più, consulta il codice di pubblicazione di esempio.

Pubblica il file JAR Javadoc

AGP 7.1.0 e versioni successive ti consentono di generare Javadoc dalle sorgenti Java e Kotlin e di pubblicare file JAR Javadoc oltre agli AAR per i progetti di librerie. Il file Javadoc viene aggiunto ai file POM e Gradle Module Metadata{:.external}. Attiva questa funzionalità aggiungendo withJavadocJar() nel singleVariant o nel blocco di pubblicazione multipleVariants. Per scoprire di più, consulta l'esempio di codice per le opzioni di pubblicazione.

Pubblicare il file JAR delle origini

AGP 7.1.0 e versioni successive ti consentono di pubblicare file JAR di codice sorgente Java e Kotlin oltre agli AAR per i progetti di librerie. Le origini vengono aggiunte ai file POM e Gradle Module Metadata{:.external}. Puoi attivare questa funzionalità aggiungendo withSourcesJar() nel blocco di pubblicazione singleVariant o multipleVariants. Per saperne di più, consulta l'esempio di codice per le 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 ulteriori informazioni, consulta la documentazione di riferimento dei blocchi lint{} e i punti di estensione e di flusso di compilazione di Android.

Le API AGP su cui si basa il plug-in Gradle Navigation Safe Args sono state rimosse. AGP 7.1 non funziona con le versioni Navigation Safe Args 2.4.0-rc1 o 2.4.0, 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 compilazione dello snapshot, segui le istruzioni per gli 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 o versioni successive.

Disattivare la creazione automatica dei componenti

A partire da AGP 8.0, la creazione automatica dei componenti verrà disattivata per impostazione predefinita. Attualmente, 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 passare al nuovo comportamento, devi disabilitare manualmente la creazione automatica dei componenti impostando android.disableAutomaticComponentCreation su true.. Per ulteriori informazioni, 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 all'upgrade di AGP non aggiorna 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 particolare upgrade manualmente.

Problemi noti

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

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

Il percorso di classe del test unitario contiene le classi di app non instrumentate, il che significa che Hilt non le instrumenta per gestire l'iniezione di dipendenze durante l'esecuzione dei test unitari.

Questo problema verrà risolto con la release 7.1.1. Vedi issue #213534628.