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 dal plug-in Android Gradle 8.3 è 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 compilazione dell'SDK.
NDK N/D 25.1.8937393 Installa o configura una versione diversa del NDK.
JDK 17 17 Per saperne di più, vedi Impostare la versione 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 release di patch in Android Studio Iguana e nel plug-in Android Gradle 8.3.

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

Questo aggiornamento minore include queste correzioni di bug.

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

Questo aggiornamento minore include queste correzioni di bug.

Supporto per i cataloghi di versioni Gradle

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

Completamento del codice e navigazione

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

Completamento del codice quando aggiungi una dipendenza

Integrazione con la finestra di dialogo Struttura del progetto

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

Variabili di un catalogo di 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 del 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 della versione direttamente in questo modo sostituisce la variabile con un valore hardcoded. Tieni inoltre presente che la rimozione di una dipendenza da un file di build, indipendentemente dall'utilizzo o meno della finestra di dialogo Struttura del progetto, non comporta la rimozione della dipendenza dal catalogo delle versioni.

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

Problemi noti e limitazioni

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

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

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

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

  • Firebase Assistant aggiunge le dipendenze direttamente agli script di compilazione: Firebase Assistant aggiunge le dipendenze direttamente agli script di compilazione anziché tramite i cataloghi di 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 sia in KTS o Groovy. In altre parole, l'utilizzo di Control+clic (Command+clic su macOS) su una definizione di variabile in un catalogo delle versioni non porta ai file di compilazione in cui viene utilizzata la variabile.

  • La finestra di dialogo Struttura del progetto in Android Studio mostra più file di catalogo se si trovano nella cartella principale 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 compilazione composita, la finestra di dialogo Struttura del progetto mostra solo il file del catalogo dell'app. Puoi utilizzare una compilazione composita, ma devi modificare direttamente il relativo file TOML.

Ulteriori approfondimenti sull'SDK: problemi relativi alle norme

Android Studio mostra avvisi di lint nei file build.gradle.kts e build.gradle e nella finestra di dialogo Struttura del progetto per gli SDK pubblici che presentano violazioni delle norme di Google Play nel Google Play SDK Index. Ti consigliamo di aggiornare eventuali 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 completano gli avvisi relativi alle versioni obsolete visualizzati da Android Studio.

Supporto della versione compileSdk di Android Studio

Android Studio mostra un avviso se il 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 il compileSdk usato dal progetto. Tieni presente che l'upgrade di Android Studio potrebbe richiedere anche l'upgrade di AGP. AGP mostra anche un avviso nella finestra dello strumento Build se il compileSdk utilizzato dal progetto non è supportato dalla versione corrente di AGP.

Modifiche al comportamento di lint

A partire dal plug-in Android 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 gradle.properties file.

Riduzione delle risorse precisa attivata per impostazione predefinita

Il ridimensionamento preciso delle risorse, che rimuove le voci inutilizzate dal fileresources.arsc ed elimina i file di risorse inutilizzati, è attivo per impostazione predefinita. Quando questa riduzione è attivata, la tabella delle risorse viene ridotta e nell'APK vengono incluse solo le voci della cartella res a cui si fa riferimento.

Per disattivare il ridimensionamento preciso 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
La cache di compilazione è ridondante per l'attività PackageForUnitTest
[AGP 8.1.0] Il comando ./gradlew test non riesce con il messaggio "Impossibile trovare l'output del file manifest" se sia splits.abi.isEnable sia testOptions.unitTests.isIncludeAndroidResources sono true
La compilazione del modello AGP non riesce con le build composite di Gradle nidificate
Lo strumento di riduzione delle risorse danneggia gli ID risorsa, causando arresti anomali in fase di runtime
Il controllo della versione minima di Gradle non viene eseguito dalla seconda compilazione in poi
Esecuzione non riuscita per l'attività ':app:mergeReleaseClasses' dopo l'aggiornamento di AGP da 8.0.2 a 8.1.0
[Gradle 8.4][upgrade] Errore del test di integrazione dopo l'upgrade a causa dell'utilizzo di una funzionalità deprecata nel plug-in gradle kotlin
Non controllare l'esistenza di file manifest overlay durante la fase di configurazione
Link rotto alla documentazione di Gradle in caso di 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 di informazioni per il plug-in "Analytics other plugin to proto: ..." di AGP
[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 lint autonomo non gestisce correttamente la dipendenza gradleApi()
Documentazione di kDocs scadente per classi/proprietà AGP. "VariantOutput.enable" suggerisce che debba essere sostituito con "VariantOutput.enable"
AGP 8.3.0-alpha02 non può installare i profili di rilascio sugli host Windows
Applicare il vincolo "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 - "Errore: impossibile deserializzare il repository delle risorse memorizzate nella cache".
[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 dei test con strumenti, mentre 7.4.2 no
La trasformazione di un APK genera un errore con ListingFileRedirectTask
La trasformazione dell'elemento ASSETS genera posizioni di input/output non valide
Promuovere android.experimental.r8.dex-startup-optimization=true come valore predefinito
Esegui la migrazione alla nuova API di allineamento della configurazione di Gradle
La compilazione delle risorse non riesce quando il compilatore Kotlin tenta di aggiornarsi a IDEA 21.3
Metodo get() reattivo con l'API degli elementi
Eseguire la promozione della proprietà AGP "android.lint.printStackTrace" a stabile
AGP 8.1.0: funzionalità dinamica: la dipendenza implicita tra exportReleaseConsumerProguardFiles ed extractProguardFiles causa errori di compilazione
Sembra che "variant.unitTest.jniLibs.addGeneratedSourceDirectory" non faccia nulla
Aggiornamento dell'interprete XML utilizzato in AGP per la compatibilità con Gradle 8.4
Lo strumento Jacoco del pacchetto di release AGP 8.0.1 non viene applicato
HEDGEHOG REGRESSION: Run button is delayed by a few seconds (Creating spec)
AGP 8.3.0-alpha11 produce un APK di release che si arresta in modo anomalo all'avvio con android.content.res.Resources$NotFoundException
Eseguire la promozione della 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 dovrebbe interrompere l'invio di spam delle informazioni di log allo standard out
DexArchiveBuilderTaskDelegate non è riuscito con il modulo della raccolta solo risorse
AGP7.4 custom plugin variant toTransform for all throw duplicate entry: META-INF/MANIFEST.MF exception
Supporto di nuovi tag manifest,
Il link per "Progetti disaccoppiati" nelle impostazioni di Studio rimanda alla pagina sbagliata.
Fornisci opzioni per includere le origini generate in Javadoc e SourceJar
È necessaria una correzione rapida per la discrepanza tra compileSdk e la dipendenza con minCompileSdkVersion
[Gradle] tools:overrideLibrary dovrebbe supportare l'asterisco (*)
Blocco dell'interfaccia utente durante la modifica del manifest
Impossibile impostare la versione 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 desugared] La versione 2.1 della libreria desugared non è compatibile con le versioni precedenti di R8
Le ottimizzazioni vengono eseguite anche solo con D8?
Lint
[Lint] TranslucentViewDetector si arresta in modo anomalo nella funzione filterIncident e causa un risultato errato del lint
TranslucentViewDetector deve accettare il valore "behind"
Android Lint non riesce a eseguire una libreria KMP con "la proprietà 'variantInputs.name' non ha un valore configurato".
TranslucentViewDetector segnala una riga errata nel file manifest
lintDebug segnala erroneamente avvisi UseTomlInstead quando si utilizzano le dipendenze del progetto
Problemi imprevisti di un altro progetto segnalati da Android Lint
Rilevamento di falsi positivi di risorse inutilizzate nel controllo LINT all'interno dell'associazione e dell'ascoltatore dei clic
Impossibile caricare il file jar del controllo lint personalizzato: non è possibile eseguire il casting di Node in TreeNode
Lint visitAnnotationUsage non viene chiamato per gli utilizzi delle classi annotate nelle dichiarazioni delle variabili
Lint 31.0.2 non va a buon fine 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 di lint InvalidId di AGP 8.0.2
Problemi LintError aggiunti alle linee di base di lint
La correzione rapida di Lint non funziona e genera un errore IDE
Errore di test incoerente a causa di un'analisi parziale
Evidenziazione non valida di un avviso che è un falso positivo
Lint visitAnnotationUsage non viene chiamato per gli utilizzi delle classi annotate nelle dichiarazioni delle variabili
Il Processore delle risorse inutilizzate potrebbe eliminare il file di compilazione di Gradle
Il controllo lint di NewApi non comprende il campo finale "isAtleastU() && otherCondition()"
StackOverflow da "LintClient.getSdkHome"
Android Studio / Lint non indica quando le dipendenze "platform" sono obsolete
Bug: nessun suggerimento per aggiornare la dipendenza Firebase-bom
Project Structure (e Gradle (?)) non rileva le dipendenze della distinta base di Firebase da eseguire l'upgrade a una versione più recente.
Integrazione di lint
Errore di 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 in 8.3.0-alpha11 e alpha14
Arresto anomalo dell'SDK Flurry R8 con AGP 8.2.0
Android - R8 causa un arresto anomalo della sottoclasse di LinearLayoutManager
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 è più grande di 1,57 MB rispetto a R8 8.1.56
[R8 8.3.21] R8 8.3.21 è più grande di 1,57 MB rispetto a R8 8.1.56
class.getInterfaces() restituisce un valore vuoto
Il test SimpleKotlinEnumUnboxingTest non va a buon fine nel bot kotlin_dev

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 fratelli in AGP 8.3.0-rc02

Plug-in Android per Gradle 8.3.2

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