Plug-in Android Gradle 8.3.0 (febbraio 2024)

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

Compatibilità

Il livello API massimo supportato da Android Gradle Plugin 8.3 è il livello API 34. Ecco altre informazioni sulla compatibilità:

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

Di seguito sono riportate le nuove funzionalità del plug-in Android per Gradle 8.3.

Release delle patch

Di seguito è riportato un elenco delle patch rilasciate in Android Studio Iguana e nel plug-in Android per Gradle 8.3.

Android Studio Iguana | 2023.2.1 Patch 2 e AGP 8.3.2 (aprile 2024)

Questo aggiornamento minore include queste correzioni di bug.

Android Studio Iguana | 2023.2.1 Patch 1 e AGP 8.3.1 (marzo 2024)

Questo aggiornamento minore include queste correzioni di bug.

Supporto dei cataloghi delle versioni di Gradle

Android Studio supporta i cataloghi delle versioni di Gradle basati su TOML, una funzionalità che ti consente di gestire le dipendenze in un'unica posizione centrale e di condividerle tra moduli o progetti. Android Studio ora semplifica la configurazione dei cataloghi delle versioni tramite suggerimenti dell'editor e l'integrazione con la finestra di dialogo Struttura progetto. Scopri come configurare i cataloghi delle versioni di Gradle o come eseguire la migrazione della build ai cataloghi delle versioni.

Completamento e navigazione del codice

Android Studio offre il completamento del codice quando modifichi un catalogo delle versioni nel formato di file TOML o quando aggiungi una dipendenza da un catalogo delle versioni a un file di build. Per utilizzare il completamento del codice, premi Ctrl+Spazio (Command+Spazio su macOS). Inoltre, puoi passare rapidamente da un riferimento di dipendenza nel file build.gradle della tua app a dove è dichiarato nel catalogo delle versioni premendo Ctrl+b (Command+b su macOS).

Completamento del codice quando aggiungi una dipendenza

Integrazione con la finestra di dialogo Struttura progetto

Se il tuo progetto utilizza un catalogo delle versioni definito nel formato di file TOML, puoi modificare le variabili che hai definito tramite la finestra di dialogo Struttura progetto e la visualizzazione Variabili (File > Struttura progetto > Variabili) in Android Studio. Per ogni catalogo delle versioni, è presente un menu a discesa che elenca le variabili del catalogo. Per modificare una variabile, fai clic sul relativo valore e sovrascrivilo. Quando salvi queste modifiche, il file TOML viene aggiornato di conseguenza.

Variabili di un catalogo delle versioni nella finestra di dialogo Struttura del progetto

Puoi anche aggiornare le dipendenze nella finestra di dialogo Struttura del progetto nella visualizzazione Dipendenze (File > Struttura del progetto > Dipendenze). Per aggiornare le versioni utilizzando la finestra di dialogo Struttura progetto, vai al modulo e alla dipendenza che vuoi modificare, quindi aggiorna il campo Versione richiesta. Quando salvi queste modifiche, il file TOML viene aggiornato di conseguenza. Tieni presente che se la versione della dipendenza è stata definita utilizzando una variabile, l'aggiornamento diretto della versione sostituisce la variabile con un valore hardcoded. Tieni inoltre presente che la rimozione di una dipendenza da un file di build, indipendentemente dal fatto che utilizzi la finestra di dialogo Struttura progetto o meno, non rimuove la dipendenza dal catalogo delle versioni.

Dipendenze da un catalogo delle versioni nella finestra di dialogo Struttura del progetto

Problemi noti e limitazioni

Di seguito sono riportati i problemi noti o le limitazioni del supporto dei cataloghi delle versioni di Gradle in Android Studio.

  • Errore di evidenziazione delle dichiarazioni di alias del plug-in nei file di script Kotlin: quando aggiungi una dichiarazione di plug-in del modulo alias(libs.plugins.example), l'editor aggiunge una sottolineatura rossa sotto la parte libs. Si tratta di un problema noto nelle versioni di Gradle 8.0 e precedenti, che verrà risolto in una futura release di Gradle.

  • Supporto di Android Studio solo per i cataloghi delle versioni in formato TOML: al momento il completamento del codice, la navigazione e la finestra di dialogo Struttura del progetto di Android Studio sono disponibili solo per i cataloghi delle versioni definiti nel formato del file TOML. Tuttavia, puoi comunque aggiungere un catalogo delle versioni direttamente nel file settings.gradle e utilizzare le relative dipendenze nel tuo progetto.

  • Navigazione per i file di build KTS non supportata: la navigazione fino a una definizione di dipendenza in un catalogo delle versioni utilizzando Controllo+clic (Comando+clic su macOS) non è ancora supportata per i file di build scritti utilizzando lo script Kotlin.

  • Firebase Assistant aggiunge le dipendenze direttamente negli script di build: l'assistente Firebase aggiunge le dipendenze direttamente agli script di build anziché tramite i cataloghi delle versioni.

  • Funzionalità "Trova utilizzi" non supportata: la ricerca degli utilizzi di una variabile del catalogo delle versioni in altri file di build non è ancora supportata, indipendentemente dal fatto che il file di build si trovi in KTS o Groovy. ovvero, l'utilizzo di Control+clic (Command+clic su macOS) su una definizione di variabile in un catalogo di versioni non porta ai file di build in cui viene utilizzata la variabile.

  • La finestra di dialogo Struttura progetto in Android Studio mostra più file di catalogo se si trovano nella cartella root gradle, ma non mostra i cataloghi per una build composita. Ad esempio, se hai due file di catalogo, uno per la tua app e uno per una build composita, la finestra di dialogo Struttura del progetto mostra solo il file di catalogo dell'app. Puoi utilizzare una build composita, ma devi modificare direttamente il relativo file TOML.

Altri approfondimenti sull'SDK: problemi relativi alle norme

Android Studio mostra gli avvisi lint nei file build.gradle.kts e build.gradle e nella finestra di dialogo Struttura progetto per gli SDK pubblici che presentano violazioni delle norme di Google Play nell'indice SDK di Google Play. Devi aggiornare tutte le dipendenze che violano le norme di Google Play, perché queste violazioni potrebbero impedirti di pubblicare in futuro su Google Play Console. Gli avvisi di violazione delle norme integrano gli avvisi di versione obsoleta visualizzati da Android Studio.

Supporto della versione compileSdk di Android Studio

Android Studio mostra un avviso se il tuo progetto utilizza un compileSdk non supportato dalla versione corrente di Android Studio. Se disponibile, suggerisce anche di passare a una versione di Android Studio che supporti compileSdk utilizzato dal tuo progetto. Tieni presente che l'upgrade di Android Studio potrebbe richiedere anche l'upgrade di AGP. AGP mostra anche un avviso nella finestra degli strumenti Build se compileSdk utilizzato dal tuo progetto non è supportato dalla versione corrente di AGP.

Modifiche al comportamento di lint

A partire dal plug-in Android per Gradle 8.3.0-alpha02, quando esegui lint su un modulo, vengono eseguite attività di analisi lint separate per i componenti principali e di test del modulo. Il motivo di questa modifica è migliorare il rendimento. Per ripristinare il comportamento precedente, imposta android.experimental.lint.analysisPerComponent=false nel file gradle.properties.

Riduzione precisa delle risorse attivata per impostazione predefinita

La riduzione precisa delle risorse, che rimuove le voci inutilizzate dal file resources.arsc ed elimina i file di risorse inutilizzati, è attiva per impostazione predefinita. Quando questa riduzione è abilitata, la tabella delle risorse viene ridotta e nell'APK vengono incluse solo le voci della cartella res a cui viene fatto riferimento.

Per disattivare la riduzione precisa delle risorse, imposta android.enableNewResourceShrinker.preciseShrinking su false nel file gradle.properties del progetto.

Problemi risolti

Plug-in Android per Gradle 8.3.0

Problemi risolti
Plug-in Android per Gradle
Build cache è ridondante per l'attività PackageForUnitTest
[AGP 8.1.0] ./gradlew test non riesce con "Unable to find manifest output" se sia splits.abi.isEnable che testOptions.unitTests.isIncludeAndroidResources sono impostati su true
La creazione del modello AGP non riesce con le build composite Gradle nidificate
Lo strumento di riduzione delle risorse altera gli ID risorsa, causando arresti anomali del runtime
Il controllo della versione minima di Gradle non viene eseguito nella seconda build e successive
L'esecuzione dell'attività ":app:mergeReleaseClasses" non è riuscita dopo l'aggiornamento di AGP dalla versione 8.0.2 alla 8.1.0
[Gradle 8.4][upgrade] Errore del test di integrazione dopo l'upgrade dovuto all'utilizzo della funzionalità ritirata nel plug-in Gradle Kotlin
Non controllare l'esistenza di file di overlay del manifest durante la fase di configurazione
Link non funzionante alla documentazione di Gradle sull'errore MergeJavaResWorkAction
Gradle 8.1 interrompe la memorizzazione nella cache della configurazione a causa di .gradle/.android/analytics.settings
AGP non deve utilizzare ProjectComponentIdentifier.projectPath senza ProjectComponentIdentifier.build
Riduci/rimuovi il logging a livello informativo per AGP "Analytics other plugin to proto: ..."
[Gradle 8.4][upgrade] L'operazione sui file durante la configurazione in ProcessJavaResTask interrompe la memorizzazione nella cache della configurazione
API Variant per ottenere la tabella dei simboli (R.txt)
Il plug-in autonomo Lint non gestisce correttamente la dipendenza gradleApi()
Documentazione kDocs scadente su classi/proprietà AGP. `VariantOutput.enable` suggerisce di sostituirlo con `VariantOutput.enable`
AGP 8.3.0-alpha02 non può installare profili di rilascio su host Windows
Imponi `android.enableDexingArtifactTransform=true`
[Gradle 8.4][upgrade] Errore del test di integrazione dopo l'upgrade a causa della gestione dei file nella fase di configurazione
AGP 8.3.0-alpha-02 - `Error: Failed to deserialize cached resource repository.`
[Gradle 8.4][upgrade] Errore del test di integrazione dopo l'upgrade a causa della gestione dei file nella fase di configurazione di TestLabBuildService
AGP 8.1.0 disinstalla l'app dopo l'esecuzione di test strumentati, mentre la versione 7.4.2 non lo fa
La trasformazione di un APK genera un errore con ListingFileRedirectTask
La trasformazione dell'artefatto ASSETS fornisce posizioni di input/output non valide
Promuovi android.experimental.r8.dex-startup-optimization=true come impostazione predefinita
Esegui la migrazione alla nuova API di allineamento della configurazione Gradle
La compilazione delle risorse non riesce quando il compilatore Kotlin tenta di eseguire l'aggiornamento a IDEA 21.3
Reactive get() con l'API Artifacts
Promuovere la proprietà AGP "android.lint.printStackTrace" a stabile
AGP 8.1.0: funzionalità dinamica: la dipendenza implicita tra exportReleaseConsumerProguardFiles ed extractProguardFiles causa errori di compilazione
`variant.unitTest.jniLibs.addGeneratedSourceDirectory` non sembra fare nulla
Aggiorna il parser XML utilizzato in AGP per la compatibilità con Gradle 8.4
Il pacchetto di rilascio AGP 8.0.1 jacoco instrument non ha effetto
REGRESSIONE HEDGEHOG: il pulsante Esegui è ritardato di alcuni secondi (creazione della specifica)
AGP 8.3.0-alpha11 produce un APK di rilascio che si arresta in modo anomalo all'avvio con android.content.res.Resources$NotFoundException
Promuovere la proprietà AGP "android.lint.printStackTrace" a stabile
Richiesta di funzionalità: promuovere com.android.build.api.extension.impl.CURRENT_AGP_VERSION a un'API pubblica
SDK Manager deve interrompere l'invio di informazioni di log a stdout
DexArchiveBuilderTaskDelegate non è riuscito a eseguire il modulo della libreria solo con le risorse
Variante del plug-in personalizzato AGP7.4 per Transform per tutte le eccezioni di voci duplicate: META-INF/MANIFEST.MF
Supportare nuovi tag manifest,
Il link per i "progetti disaccoppiati" nelle impostazioni di Studio rimanda alla posizione sbagliata.
Fornisci le opzioni per includere le origini generate in Javadoc e SourceJar
È necessario correggere rapidamente la discrepanza tra compileSdk e la dipendenza con minCompileSdkVersion
[Gradle] tools:overrideLibrary deve supportare l'asterisco (*)
Blocco dell'interfaccia utente durante la modifica del manifest
Impossibile impostare la versione di JaCoCo in AGP 8.2.0
L'attività di installazione del plug-in Android per Gradle 8.2.0 non riesce nel progetto che utilizza funzionalità dinamiche
L'attività di installazione del plug-in Android per Gradle 8.2.0 non riesce nel progetto che utilizza funzionalità dinamiche
Dexer (D8)
[libreria desugarizzata] La libreria desugarizzata versione 2.1 non è compatibile con le versioni precedenti di R8
Ottimizzazioni eseguite anche solo con D8?
Pelucchi
[Lint] TranslucentViewDetector si arresta in modo anomalo nella funzione filterIncident e fa sì che Lint produca risultati errati
TranslucentViewDetector deve accettare il valore "behind"
Android Lint non riesce a elaborare una libreria KMP con il messaggio `property 'variantInputs.name' doesn't have a configured value.`
TranslucentViewDetector segnala una riga errata nel manifest
lintDebug segnala erroneamente avvisi UseTomlInstead quando si utilizzano le dipendenze del progetto
Problemi imprevisti di un altro progetto segnalati da Android Lint
Controllo LINT Rilevamento di falsi positivi di risorse inutilizzate all'interno del listener di binding e clic
Impossibile caricare il file JAR di controllo lint personalizzato: il nodo non può essere eseguito il cast in TreeNode
Lint visitAnnotationUsage non chiamato per gli utilizzi di classi annotate nelle dichiarazioni di variabili
Lint 31.0.2 non riesce a compilare con java.util.NoSuchElementException: Array is empty.
Nessun avviso Lint relativo a kotlin.text.MatchNamedGroupCollection#get(String) che richiede l'API 26
lint:TypographyQuotes false negatives: more than one escaped apostrophe are ignored
Falso positivo del rilevatore InvalidId di AGP 8.0.2
Problemi LintError aggiunti alle baseline di lint
Quickfix Lint non funziona e genera un errore IDE
Errore di test incoerente dovuto ad analisi parziale
Evidenziazione non valida di un avviso che è un falso positivo
Lint visitAnnotationUsage non chiamato per gli utilizzi di classi annotate nelle dichiarazioni di variabili
Unused Resources Processor potrebbe eliminare il file di build Gradle
Il controllo lint NewApi non comprende il campo finale "isAtleastU() && otherCondition()"
StackOverflow da `LintClient.getSdkHome`
Android Studio / Lint non ti avvisa quando le dipendenze "platform" non sono aggiornate
Bug: nessun suggerimento per aggiornare la dipendenza Firebase-bom
Project Structure (e Gradle (?)) non rileva le dipendenze della distinta base di Firebase da aggiornare a una versione più recente.
Integrazione di Lint
Errore lint DuplicatePlatformClasses dalla dipendenza testImplementation
Shrinker (R8)
R8 non funziona dopo l'upgrade da AGP 8.0.2 a 8.1.0
isShrinkResources esegue un'ottimizzazione eccessiva nelle versioni da 8.3.0-alpha11 ad alpha14
Arresto anomalo dell'SDK Flurry R8 con AGP 8.2.0
Android - R8 causes subclass of LinearLayoutManager to crash
R8 v8.2.33, arresto anomalo di runtime "java.lang.VerifyError: Bad type on operand stack" dopo l'upgrade
[R8 8.3.21] R8 8.3.21 è 1,57 MB più grande di R8 8.1.56
[R8 8.3.21] R8 8.3.21 è 1,57 MB più grande di R8 8.1.56
class.getInterfaces() restituisce un valore vuoto
Test SimpleKotlinEnumUnboxingTest fails on kotlin_dev bot

Plug-in Android per Gradle 8.3.1

Problemi risolti
Plug-in Android per Gradle
Problema di gestione degli input incrementali di MergeJavaResourcesTask
Integrazione di Lint
Lint non riesce a risolvere i tipi di set di origini di pari livello in AGP 8.3.0-rc02

Plug-in Android per Gradle 8.3.2

Problemi risolti
Plug-in Android per Gradle
AGP 8.3 con desugaring abilitato può verificarsi un deadlock
AGP 8.3 interrompe l'attività zipApksFor
Integrazione di Lint
Lint non è in grado di disambiguare una dipendenza KMP