Questa pagina contiene le note di rilascio per le versioni di anteprima del plug-in Android Gradle (AGP).
Plug-in Android per Gradle 9.0
Il plug-in Android per Gradle 9.0 è una nuova versione principale di AGP e introduce modifiche al comportamento e alle API.
Per eseguire l'aggiornamento al plug-in Android per Gradle 9.0.0-alpha10, utilizza l'assistente per l'upgrade del plug-in Android per Gradle in Android Studio Otter | 2025.2.1.
L'assistente per l'upgrade di AGP aiuta a preservare i comportamenti esistenti durante l'upgrade del progetto, se appropriato, consentendoti di eseguire l'upgrade del progetto per utilizzare AGP 9.0, anche se non sei pronto ad adottare tutti i nuovi valori predefiniti di AGP 9.0.
Compatibilità
Il livello API Android massimo supportato da Android Gradle Plugin 9.0.0-alpha10 è il livello API 36.
Il plug-in Android per Gradle 9.0.0-alpha10 richiede Gradle 9.0.0.
Versione minima | Versione predefinita | Note | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | Per scoprire di più, consulta la sezione Aggiornare Gradle. |
Strumenti di compilazione SDK | 36.0.0 | 36.0.0 | Installa o configura gli strumenti di creazione dell'SDK. |
NDK | N/D | 28.2.13676358 | Installa o configura una versione diversa dell'NDK. |
JDK | 17 | 17 | Per saperne di più, vedi Impostare la versione di JDK. |
Le classi android
DSL ora implementano solo le nuove interfacce pubbliche
Negli ultimi anni abbiamo introdotto
nuove interfacce per il nostro DSL e la nostra API per
controllare meglio quali API sono pubbliche. Le versioni di AGP 7.x e 8.x utilizzavano ancora i vecchi tipi di DSL (ad esempio BaseExtension
), che implementavano anche le nuove interfacce pubbliche, per mantenere la compatibilità man mano che il lavoro sulle interfacce procedeva.
AGP 9.0 utilizza esclusivamente le nostre nuove interfacce DSL e le implementazioni sono state modificate in nuovi tipi completamente nascosti. Queste modifiche rimuovono anche l'accesso alla vecchia API variante deprecata.
Per eseguire l'aggiornamento ad AGP 9.0, potresti dover:
- Assicurati che il tuo progetto sia compatibile con Kotlin
integrato: il
plug-in
org.jetbrains.kotlin.android
non è compatibile con il nuovo DSL. Passa ai progetti KMP con il plug-in Android Gradle Library per KMP: l'utilizzo del plug-in
org.jetbrains.kotlin.multiplatform
nello stesso sottoprogetto Gradle dei plug-incom.android.library
ecom.android.application
non è compatibile con il nuovo DSL.Aggiorna i file di build: Sebbene la modifica delle interfacce sia pensata per mantenere la DSL il più simile possibile, potrebbero esserci alcune piccole modifiche.
Aggiorna la logica di build personalizzata in modo che faccia riferimento alla nuova DSL e alla nuova API: Sostituisci tutti i riferimenti alla DSL interna con le interfacce DSL pubbliche. Nella maggior parte dei casi, si tratta di una sostituzione uno a uno. Sostituisci qualsiasi utilizzo di
applicationVariants
e API simili con la nuova APIandroidComponents
. Questa operazione potrebbe essere più complessa, in quanto l'APIandroidComponents
è progettata per essere più stabile e mantenere la compatibilità dei plug-in più a lungo. Consulta le nostre ricette Gradle per alcuni esempi.Aggiorna i plug-in di terze parti: alcuni plug-in di terze parti potrebbero ancora dipendere da interfacce o API non più esposte. Esegui la migrazione alle versioni di questi plug-in compatibili con AGP 9.0.
Il passaggio alle nuove interfacce DSL impedisce ai plug-in e agli script di build Gradle di utilizzare varie API ritirate, tra cui:
API obsoleta nel blocco android |
Funzione | Sostituzione |
---|---|---|
applicationVariants ,libraryVariants ,testVariants eunitTestVariants
|
Punti di estensione per i plug-in per aggiungere nuove funzionalità ad AGP. |
Sostituisci questo valore con l'API
androidComponents.onVariants , ad esempio:
androidComponents { onVariants() { variant -> variant.signingConfig .enableV1Signing.set(false) } } |
variantFilter
|
Consente di disattivare le varianti selezionate. |
Sostituisci questo valore con l'API
androidComponents.beforeVariants , ad esempio:
androidComponents { beforeVariants( selector() .withBuildType("debug") .withFlavor("color", "blue") ) { variantBuilder -> variantBuilder.enable = false } } |
deviceProvider etestServer
|
Registrazione di ambienti di test personalizzati per l'esecuzione di test su dispositivi ed emulatori Android. | Passa a Dispositivi gestiti da Gradle. |
sdkDirectory ,ndkDirectory ,bootClasspath ,adbExecutable eadbExe
|
Utilizzo di vari componenti dell'SDK Android per attività personalizzate. |
Passa a
androidComponents.sdkComponents .
|
registerArtifactType ,registerBuildTypeSourceProvider ,registerProductFlavorSourceProvider ,registerJavaArtifact ,registerMultiFlavorSourceProvider ewrapJavaSourceSet |
Funzionalità obsolete per lo più correlate alla gestione delle sorgenti generate in Android Studio, che hanno smesso di funzionare in AGP 7.2.0. | Non esiste un'alternativa diretta a queste API. |
Se esegui l'aggiornamento ad AGP 9.0 e visualizzi il seguente messaggio di errore, significa che il tuo progetto fa ancora riferimento ad alcuni dei tipi precedenti:
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
Se sei bloccato da plug-in di terze parti incompatibili, puoi disattivare
le vecchie implementazioni per DSL, nonché la vecchia API Variant.
Durante questa operazione, sono disponibili anche le nuove interfacce e puoi comunque aggiornare la tua logica di build alla nuova API. Per effettuare la disattivazione, includi questa riga nel file gradle.properties
:
android.newDsl=false
Puoi anche iniziare l'upgrade alle nuove API prima di eseguire l'upgrade ad AGP 9.0. Le nuove interfacce sono presenti in molte versioni di AGP, quindi puoi avere un mix di nuove e vecchie. La documentazione di riferimento dell'API AGP mostra la superficie dell'API per ogni versione di AGP e quando sono stati aggiunti ogni classe, metodo e campo.
Durante la fase alpha 9.0, contatteremo gli autori di plug-in per aiutarli ad adattare e rilasciare plug-in completamente compatibili con le nuove modalità e miglioreremo l'assistente per l'upgrade di AGP in Android Studio per guidarti durante la migrazione.
Se riscontri che le nuove API DSL o Variant non dispongono di funzionalità o caratteristiche, segnala un problema il prima possibile.
Kotlin integrato
Il plug-in Android per Gradle 9.0 include il supporto integrato per la compilazione di Kotlin, sostituendo il plug-in Kotlin applicato separatamente. Ciò semplifica l'integrazione con AGP, evitando l'utilizzo delle API ritirate e migliorando le prestazioni in alcuni casi.
Il plug-in Android per Gradle 9.0 ha una dipendenza di runtime dal plug-in Kotlin Gradle 2.2.10, che è la versione minima richiesta per il supporto Kotlin integrato.
Kotlin integrato in AGP 9.0 offre il supporto completo dell'IDE Android Studio per
test-fixtures.
Per provare questa funzionalità, utilizza AGP 9.0.0-alpha07
o versioni successive.
Puoi disattivare Kotlin integrato impostando
android.builtInKotlin=false
.
Se hai disattivato Kotlin integrato e devi anche utilizzare una versione precedente del plug-in Kotlin Gradle, puoi forzare il downgrade:
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
Modifiche al funzionamento
Il plug-in Android per Gradle 9.0 ha i seguenti nuovi comportamenti:
Comportamento | Consiglio |
---|---|
Il plug-in Android per Gradle 9.0 utilizza la versione r28c dell'NDK per impostazione predefinita.
|
Valuta la possibilità di specificare in modo esplicito la versione dell'NDK che vuoi utilizzare. |
Il plug-in Android Gradle 9.0 richiede per impostazione predefinita che i consumatori di una libreria utilizzino la stessa versione dell'SDK di compilazione o una versione successiva. |
Utilizza lo stesso SDK di compilazione o una versione successiva quando utilizzi una libreria.
Se non è possibile o vuoi dare più tempo ai consumatori di una libreria che
pubblichi per passare, imposta
AarMetadata.minCompileSdk
in modo esplicito.
|
AGP 9.0 include aggiornamenti ai valori predefiniti delle seguenti proprietà di Gradle. In questo modo, puoi scegliere di mantenere il comportamento di AGP 8.13 durante l'upgrade:
Proprietà | Funzione | Passaggio da AGP 8.13 ad AGP 9.0 | Consiglio |
---|---|---|---|
android.newDsl |
Utilizza le nuove interfacce DSL senza esporre le implementazioni legacy
del blocco android .Ciò significa anche che l'API legacy per le varianti, ad esempio android.applicationVariants
non è più accessibile.
|
false → true |
Puoi disattivare l'opzione impostando
android.newDsl=false .Una volta che tutti i plug-in e la logica di build utilizzati dal tuo progetto sono compatibili, rimuovi l'opt-out. |
android.builtInKotlin |
È stato attivato il supporto per la compilazione del codice Kotlin direttamente nel plug-in Android Gradle, senza il plug-in org.jetbrains.kotlin.android .
|
false → true |
Adotta Kotlin integrato rimuovendo l'utilizzo del plug-in
org.jetbrains.kotlin.android , se possibile.
In caso contrario, disattiva l'opzione impostando android.builtInKotlin=false
|
android.uniquePackageNames |
Impone che ogni libreria abbia un nome di pacchetto distinto. | false → true |
Specifica nomi di pacchetti univoci per tutte le librerie all'interno del progetto. Se non è possibile, puoi disattivare questo flag durante la migrazione. |
android.dependency.useConstraints |
Controlla l'utilizzo dei vincoli di dipendenza tra le configurazioni. Il valore predefinito in AGP 9.0 è false , che utilizza solo i vincoli nei test dei dispositivi dell'applicazione (AndroidTest).
Se imposti questo valore su true , verrà ripristinato il comportamento della versione 8.13.
|
true → false |
Non utilizzare vincoli di dipendenza ovunque, a meno che non siano necessari. L'accettazione del nuovo valore predefinito di questo flag consente anche le ottimizzazioni nel processo di importazione del progetto, che dovrebbe ridurre il tempo di importazione per le build con molti progetti secondari della libreria Android. |
aandroid.enableAppCompileTimeRClass |
Compila il codice nelle applicazioni in base a una classe R non finale, allineando
la compilazione delle applicazioni a quella delle librerie. Ciò migliora l'incrementalità e apre la strada a future ottimizzazioni delle prestazioni del flusso di elaborazione delle risorse. |
false → true |
Molti progetti possono semplicemente adottare il nuovo comportamento senza modifiche al codice sorgente. Se i campi della classe R vengono utilizzati in un punto che richiede una costante, ad esempio i casi switch, esegui il refactoring per utilizzare istruzioni if concatenate. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
Utilizza la versione dell'SDK di compilazione come valore predefinito per la versione dell'SDK target in app e test. Prima di questa modifica, la versione dell'SDK target veniva impostata per impostazione predefinita sulla versione dell'SDK minima. |
false → true |
Specifica esplicitamente la versione dell'SDK target per app e test. |
android.onlyEnableUnitTestForTheTestedBuildType |
Crea solo componenti di test delle unità per il tipo di build testato. Nel progetto predefinito, questo comporta un singolo test unitario per il debug, mentre il comportamento precedente prevedeva l'esecuzione di test unitari per il debug o il rilascio. |
false → true |
Se il tuo progetto non richiede l'esecuzione di test sia per il debug che per il rilascio, non è necessaria alcuna modifica. |
android.proguard.failOnMissingFiles |
La build non riesce e viene visualizzato un errore se uno dei file di conservazione specificati nel DSL AGP non esiste sul disco. Prima di questa modifica, gli errori di battitura nei nomi dei file comportavano l'ignoramento silenzioso dei file. | false → true |
Rimuovi eventuali dichiarazioni di file Proguard non validi |
android.r8.optimizedResourceShrinking |
Consente a R8 di conservare meno risorse Android considerando insieme classi e risorse Android. | false → true |
Se le regole di conservazione del progetto sono già state completate, non è necessaria alcuna modifica. |
android.r8.strictFullModeForKeepRules |
Consente a R8 di conservare meno elementi non conservando implicitamente il costruttore predefinito
quando una classe viene conservata.
ovvero -keep class A non implica più
-keep class A { <init>(); } |
false → true |
Se le regole di conservazione del progetto sono già state completate, non è necessaria alcuna modifica.
Sostituisci -keep class A
con
-keep class A { <init>(); }
nelle regole di conservazione del progetto per tutti i casi in cui è necessario conservare il costruttore predefinito.
|
android.defaults.buildfeatures.resvalues |
Attiva
resValues
in tutti i progetti secondari
|
true → false |
Attiva resValues solo nei sottoprogetti che ne hanno bisogno
impostando quanto segue nei file di build Gradle di questi progetti:
android { buildFeatures { resValues = true } } |
android.defaults.buildfeatures.shaders |
Attiva la compilazione degli shader in tutti i sottoprogetti | true → false |
Attiva la compilazione degli shader solo nei sottoprogetti che contengono shader da
compilare impostando quanto segue nei file di build Gradle di questi progetti:
android { buildFeatures { shaders = true } } |
android.r8.proguardAndroidTxt.disallowed |
In AGP 9.0, getDefaultProguardFile() supporterà solo proguard-android-optimize.txt anziché proguard-android.txt . Questo per evitare l'utilizzo accidentale del flag dontoptimize , incluso in proguard-android.txt .
|
false → true |
Puoi specificare esplicitamente dontoptimize in un file proguard personalizzato se vuoi evitare l'ottimizzazione, oltre a utilizzare proguard-android-optimize.txt . Se possibile, rimuovi il flag dontoptimize da questo file, in quanto riduce i vantaggi dell'ottimizzazione R8. In caso contrario, disattiva l'opzione impostando android.r8.globalOptionsInConsumerRules.disallowed=false .
|
android.r8.globalOptionsInConsumerRules.disallowed |
A partire da AGP 9.0, la pubblicazione di librerie e moduli di funzionalità Android non andrà a buon fine se i file keep per i consumatori contengono configurazioni Proguard problematiche. I file di conservazione dei consumatori che includono opzioni globali come dontoptimize o dontobfuscate devono essere utilizzati solo nei moduli dell'applicazione e possono ridurre i vantaggi dell'ottimizzazione per gli utenti della libreria. La compilazione del modulo dell'app per Android ignorerà automaticamente qualsiasi opzione globale di questo tipo se incorporata in una dipendenza precompilata (JAR o AAR). Puoi vedere quando si verifica questo problema controllando configuration.txt (in genere in un percorso come <app_module>/build/outputs/mapping/<build_variant>/configuration.txt ) per commenti come: # REMOVED CONSUMER RULE: dontoptimize
|
false → true |
Le raccolte pubblicate devono rimuovere le regole incompatibili. Le librerie interne devono spostare le regole incompatibili ma necessarie in un file proguardFile in un modulo dell'app. Disattiva l'opzione impostando android.r8.globalOptionsInConsumerRules.disallowed=false . Una volta che tutti i tuoi file di Keep per i consumatori sono compatibili, rimuovi l'opt-out.
|
Funzionalità rimosse
Il plug-in Android per Gradle 9.0 rimuove le seguenti funzionalità:
- Supporto delle app Wear OS incorporate
AGP 9.0 rimuove il supporto per l'incorporamento delle app Wear OS, che non è più supportato in Google Play. Ciò include la rimozione delle configurazioniwearApp
e della DSLAndroidSourceSet.wearAppConfigurationName
. Consulta la pagina Distribuire su Wear OS per scoprire come pubblicare la tua app su Wear OS. androidDependencies
esourceSets
report attività
DSL modificato
Il plug-in Android per Gradle 9.0 presenta le seguenti modifiche DSL che causano interruzioni:
La parametrizzazione di
CommonExtension
è stata rimossa.Di per sé, questa è solo una modifica che causa interruzioni a livello di origine per evitare future modifiche che causano interruzioni a livello di origine, ma significa anche che i metodi di blocco devono passare da
CommonExtension
aApplicationExtension
,LibraryExension
,DynamicFeatureExtension
eTestExtension
.Quando esegui l'upgrade del progetto ad AGP 9.0, esegui il refactoring del codice del plug-in Gradle che utilizza questi parametri o i metodi di blocco. Ad esempio, il seguente plug-in viene aggiornato per rimuovere il parametro type e non fare affidamento sui metodi di blocco rimossi:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }
AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }
Per i plug-in che hanno come target un intervallo di versioni di AGP, l'utilizzo diretto del getter è compatibile a livello binario con le versioni di AGP precedenti alla 9.0.
DSL rimosso
Il plug-in Android per Gradle 9.0 rimuove:
AndroidSourceSet.jni
, perché non era funzionante.AndroidSourceSet.wearAppConfigurationName
, in quanto riguarda il supporto delle app Wear OS incorporate rimosso.BuildType.isRenderscriptDebuggable
, perché non era funzionante.DependencyVariantSelection
. È sostituito daDependencySelection
, che viene esposto comekotlin.android.localDependencySelection
Installation.installOptions(String)
. È sostituito dalla proprietà modificabile diInstallation.installOptions
.Il blocco sperimentale, ma mai stabilizzato
PostProcessing
.ProductFlavor.setDimension
, che viene sostituita dalla proprietàdimension
LanguageSplitOptions
, che era utile solo per Google Play Instant, che è ritirato.
API rimosse
Il plug-in Android per Gradle 9.0 rimuove:
AndroidComponentsExtension.finalizeDSl
. È sostituito dafinalizeDsl
Component.transformClassesWith
. È sostituito daInstrumentation.transformClassesWith
Component.setAsmFramesComputationMode
. È sostituito daInstrumentation.setAsmFramesComputationMode
ComponentBuilder.enabled
. È sostituito daComponentBuilder.enable
.DependenciesInfoBuilder.includedInApk
. È sostituito daincludeInApk
DependenciesInfoBuilder.includedInBundle
. È sostituito daincludeInBundle
GeneratesApk.targetSdkVersion
. È sostituito datargetSdk
Variant.minSdkVersion
. È sostituito daminSdk
Variant.maxSdkVersion
. È sostituito damaxSdk
Variant.targetSdkVersion
. È sostituito datargetSdk
Variant.unitTest
, in quanto non era applicabile al plug-incom.android.test
.unitTest
è disponibile sui sottotipiVariantBuilder
che estendonoHasUnitTest
.VariantBuilder.targetSdk
etargetSdkPreview
, in quanto non erano significativi nelle librerie. UtilizzaGeneratesApkBuilder.targetSdk
oGeneratesApkBuilder.targetSdkPreview
in alternativa.VariantBuilder.enableUnitTest
, in quanto non era applicabile al plug-incom.android.test
.enableUnitTest
è disponibile sui sottotipiVariantBuilder
che estendonoHasUnitTestBuilder
.VariantBuilder.unitTestEnabled
viene rimosso a favore dienableUnitTest
, che ha un nome più coerente nei sottotipiVariantBuilder
che estendonoHasUnitTestBuilder
.VariantOutput.enable
. È sostituito daenabled
FeaturePlugin
eFeatureExtension
deprecati e disabilitati.Le API
BaseExtension.registerTransform
deprecate e disattivate, che sono rimaste solo per consentire la compilazione in base all'ultima versione di AGP durante il targeting dell'esecuzione su AGP 4.2 o versioni precedenti.
Proprietà Gradle rimosse
Le seguenti proprietà Gradle sono state inizialmente aggiunte come modi per disattivare globalmente le funzionalità abilitate per impostazione predefinita.
Queste funzionalità sono disattivate per impostazione predefinita a partire da AGP 8.0 o versioni precedenti. Attiva queste funzionalità solo nei sottoprogetti che le utilizzano per una compilazione più efficiente.
Proprietà | Funzione | Sostituzione |
---|---|---|
android.defaults.buildfeatures.aidl |
Attiva la compilazione AIDL in tutti i progetti secondari |
Attiva la compilazione AIDL solo nei sottoprogetti in cui sono presenti
origini AIDL
impostando la seguente proprietà nei file di build Gradle di questi progetti:
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
Attiva la compilazione di RenderScript in tutti i progetti secondari |
Attiva la compilazione di renderscript solo nei sottoprogetti in cui sono presenti
origini renderscript
impostando la seguente proprietà nei file di build Gradle di questi progetti:
android { buildFeatures { renderScript = true } } |
Proprietà Gradle applicate
AGP 9.0 genera un errore se imposti le seguenti proprietà Gradle.
L'assistente per l'upgrade del plug-in Android per Gradle non eseguirà l'upgrade dei progetti ad AGP 9.0 che utilizzano queste proprietà.
Proprietà | Funzione |
---|---|
android.r8.integratedResourceShrinking |
La riduzione delle risorse ora viene sempre eseguita nell'ambito di R8. L'implementazione precedente è stata rimossa. |
Problemi risolti
Plug-in Android per Gradle 9.0.0-alpha10
Problemi risolti | ||||
---|---|---|---|---|
Plug-in Android per Gradle |
|
|||
Pelucchi |
|
Plug-in Android per Gradle 9.0.0-alpha09
Problemi risolti | ||||
---|---|---|---|---|
Plug-in Android per Gradle |
|
Plug-in Android per Gradle 9.0.0-alpha08
Problemi risolti | |
---|---|
Nessun problema pubblico è stato contrassegnato come risolto in AGP 9.0.0-alpha08 |
Plug-in Android per Gradle 9.0.0-alpha07
Problemi risolti | |||||||||
---|---|---|---|---|---|---|---|---|---|
Plug-in Android per Gradle |
|
Plug-in Android per Gradle 9.0.0-alpha06
Problemi risolti | |||||
---|---|---|---|---|---|
Plug-in Android per Gradle |
|
||||
Pelucchi |
|
Plug-in Android per Gradle 9.0.0-alpha05
Problemi risolti | |||||
---|---|---|---|---|---|
Plug-in Android per Gradle |
|
||||
Pelucchi |
|
Plug-in Android per Gradle 9.0.0-alpha04
Problemi risolti | ||||
---|---|---|---|---|
Plug-in Android per Gradle |
|
|||
Pelucchi |
|
Plug-in Android per Gradle 9.0.0-alpha03
Problemi risolti | ||||
---|---|---|---|---|
Plug-in Android per Gradle |
|
|||
Pelucchi |
|
Plug-in Android per Gradle 9.0.0-alpha02
Problemi risolti | ||||
---|---|---|---|---|
Plug-in Android per Gradle |
|
Plug-in Android per Gradle 9.0.0-alpha01
Problemi risolti | |||||||
---|---|---|---|---|---|---|---|
Plug-in Android per Gradle |
|