Plug-in Android per Gradle 8.0.0 (aprile 2023)

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

Compatibilità

Versione minima Versione predefinita Notes
Gradle con Android 8.0 con Android 8.0 Per scoprire di più, consulta la pagina sull'aggiornamento di Gradle.
Strumenti di creazione dell'SDK 30,0,3 30,0,3 Installa o configura gli strumenti di creazione dell'SDK.
NDK N/A 25.1.8937393 Installa o configura una versione diversa dell'NDK.
JDK 17 17 Per ulteriori informazioni, vedi Impostazione della versione JDK.

Release patch

Di seguito è riportato un elenco delle release delle patch per il plug-in Android per Gradle 8.0.

Plug-in Android Gradle 8.0.2 (maggio 2023)

Per un elenco dei bug corretti in AGP 8.0.2, consulta i problemi chiusi di Android Studio 2022.2.1.

Plug-in Android Gradle 8.0.1 (maggio 2023)

Questo aggiornamento secondario include le seguenti correzioni di bug:

Problemi risolti
Errore: "Nessun requisito di versione con l'ID specificato nella tabella" dopo l'upgrade di AGP 7.2.2 -> 7.4.0
R8 NullPointerException a markTypeAsLive AGP 7.4.1
[R8 4.0.53] Errore durante la verifica della classe Hard su Android 11

Ultima modifica: spazio dei nomi obbligatorio nello script di build a livello di modulo

Devi impostare lo spazio dei nomi nel file build.gradle.kts a livello di modulo anziché nel file manifest. Puoi iniziare a utilizzare la proprietà DSL namespace a partire da AGP 7.3. Per scoprire di più, consulta Impostare uno spazio dei nomi.

Quando esegui la migrazione allo spazio dei nomi DSL, tieni presente i seguenti problemi:

  • Le versioni precedenti di AGP deduceno in modo errato lo spazio dei nomi di test dallo spazio dei nomi principale, o ID applicazione, in alcuni casi. AGP Upgrade Assistant blocca l'upgrade se rileva che lo spazio dei nomi principale e di test del progetto sono gli stessi. Se l'upgrade viene bloccato, devi modificare manualmente testNamespace e modificare il codice sorgente di conseguenza.
  • Dopo aver modificato lo spazio dei nomi di test, è possibile che il codice venga compilato, ma i test instrumentati non vanno a buon fine durante il runtime. Questo può accadere se il codice sorgente del test strumentato fa riferimento a una risorsa definita nelle origini androidTest e dell'app.

Per ulteriori informazioni, leggi il problema n. 191813691 del commento n. 19.

Modifiche che provocano un errore: valori predefiniti per le opzioni di build

A partire da AGP 8.0, i valori predefiniti di questi flag sono stati modificati per migliorare le prestazioni della build. Per ricevere assistenza in merito alla modifica del codice per supportare alcune di queste modifiche, utilizza l'Assistente per l'upgrade AGP (Strumenti > Assistente per l'upgrade AGP). L'Assistente per l'upgrade ti guida nell'aggiornamento del codice per adeguarsi al nuovo comportamento o nell'impostazione di flag per preservare il comportamento precedente.

Segnala Nuovo valore predefinito Valore predefinito precedente Notes
android.defaults.buildfeatures.buildconfig false true AGP 8.0 non genera BuildConfig per impostazione predefinita. Devi specificare questa opzione utilizzando l'interfaccia DSL nei progetti in cui ne hai bisogno.
android.defaults.buildfeatures.aidl false true AGP 8.0 non abilita il supporto AIDL per impostazione predefinita. Devi specificare questa opzione utilizzando l'interfaccia DSL nei progetti in cui ne hai bisogno. È prevista la rimozione di questo flag in AGP 9.0.
android.defaults.buildfeatures.renderscript false true Per impostazione predefinita, AGP 8.0 non attiva il supporto di RenderScript. Devi specificare questa opzione utilizzando l'interfaccia DSL nei progetti in cui ne hai bisogno. È prevista la rimozione di questo flag in AGP 9.0.
android.nonFinalResIds true false AGP 8.0 genera per impostazione predefinita classi R con campi non finali.
android.nonTransitiveRClass true false AGP 8.0 genera classi R solo per le risorse definite nel modulo attuale.
android.enableR8.fullMode true false AGP 8.0 abilita la modalità completa R8 per impostazione predefinita. Per maggiori dettagli, consulta la sezione Modalità completa R8.

Modifiche che provocano un errore: valori delle opzioni di build applicati

A partire da AGP 8.0, non puoi più modificare i valori di questi flag. Se li specifichi nel file gradle.properties, il valore viene ignorato e AGP stampa avvisi.

Segnala Valore applicato Notes
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 emette un avviso se rileva la risoluzione della configurazione durante la fase di configurazione, perché influisce negativamente sui tempi di configurazione di Gradle.
android.r8.failOnMissingClasses true AGP 8.0 non riesce a generare build che usano R8 se mancano classi per garantire una migliore ottimizzazione DEX. Per risolvere questo problema, devi aggiungere le librerie mancanti o le regole di conservazione -dontwarn. Per maggiori dettagli, consulta Avvisi di classe mancanti nello shrinker R8.
android.testConfig.useRelativePath true Quando è attivo il supporto per l'utilizzo di risorse, asset e manifest Android nei test delle unità, AGP 8.0 genera un file test_config.properties che contiene solo percorsi relativi. In questo modo, i test delle unità Android possono sempre utilizzare la cache di build di Gradle.
android.useNewJarCreator true AGP utilizza la libreria Zipflinger durante la creazione di file JAR per migliorare le prestazioni della build.
android.bundletool.includeRepositoriesInDependencyReport true Quando è abilitata l'aggiunta di informazioni sulle dipendenze dell'SDK negli AAB e negli APK, AGP 8.0 aggiunge a queste informazioni anche un elenco di repository di progetto. Per scoprire di più, consulta Informazioni sulle dipendenze per Play Console.
android.enableArtProfiles true I profili di riferimento ora vengono generati sempre. Per maggiori dettagli, consulta Profili di riferimento.
android.enableNewResourceShrinker true Utilizza la nuova implementazione di shinker delle risorse per impostazione predefinita. Il nuovo strumento di riduzione delle risorse include il supporto per le funzionalità dinamiche.
android.enableSourceSetPathsMap true Utilizzato per calcolare mappature dei percorsi delle risorse relativi, in modo che le build di Gradle siano aggiornate più spesso.
android.cacheCompileLibResources true Le risorse della libreria compilata ora possono essere memorizzate nella cache per impostazione predefinita perché Gradle tiene traccia dei file delle risorse in base alla località del progetto. Richiede l'abilitazione di android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true AGP 8.0 non crea softwarecomponent per impostazione predefinita. Al contrario, AGP crea componenti SoftwareComponenti solo per le varianti configurate per essere pubblicate utilizzando il DSL di pubblicazione.

Nuovo flag stabile per il profilo di esecuzione

Il programma AGP include il nuovo flag android.settings.executionProfile. Utilizza questo flag per eseguire l'override del profilo di esecuzione predefinito da SettingsExtension. Per scoprire di più, consulta la documentazione relativa ai plug-in per le impostazioni.

Per visualizzare l'anteprima dei flag sperimentali, consulta le note di rilascio in anteprima.

Assegnazione di proprietà lazy Kotlin non supportata

Se utilizzi Kotlin DSL di Gradle per gli script di build, tieni presente che Android Studio e AGP 8.0 non supportano l'assegnazione sperimentale delle proprietà con l'operatore =. Per ulteriori informazioni su questa funzionalità, consulta le note di rilascio e la documentazione.

Categorie di attività dello strumento di analisi Crea

A partire da Android Studio Flamingo, Build Analyzer ha una nuova visualizzazione predefinita per le attività che influiscono sulla durata della build. Se il progetto utilizza AGP 8.0 o versioni successive, anziché visualizzare singolarmente le attività, Build Analyzer le raggruppa per categoria. Ad esempio, le attività specifiche per Android Resources, Kotlin o Dexing vengono raggruppate e quindi ordinate in base alla durata della build. In questo modo è più facile capire quale categoria ha il maggiore impatto sui tempi di creazione. Se espandi ogni categoria, viene visualizzato un elenco delle attività corrispondenti. Per visualizzare le attività singolarmente, senza raggruppamento, utilizza il menu a discesa Raggruppa per.

Crea categorie di attività dello strumento di analisi.

Nuovo plug-in per le impostazioni

AGP 8.0.0-alpha09 introduce il nuovo plugin delle impostazioni. Il plug-in per le impostazioni consente di centralizzare le configurazioni globali, ovvero quelle che si applicano a tutti i moduli, in un unico posto senza dover copiare e incollare le configurazioni in più moduli. Inoltre, puoi utilizzare il plug-in per le impostazioni per creare profili di esecuzione dello strumento o diverse istruzioni su come eseguire uno strumento e passare da uno all'altro.

Per utilizzare il plug-in delle impostazioni, applicalo nel file settings.gradle:

apply plugin 'com.android.settings'

Centralizza le configurazioni globali

Per configurare configurazioni globali, utilizza il nuovo blocco android nel file settings.gradle. Ecco un esempio:

android {
  compileSdk 31
  minSdk 28
  ...
}

Profili di esecuzione degli strumenti

Il plug-in per le impostazioni ti consente anche di creare profili di esecuzione per alcuni strumenti. Un profilo di esecuzione determina la modalità di esecuzione di uno strumento; puoi selezionare profili di esecuzione diversi a seconda dell'ambiente. In un profilo di esecuzione, puoi impostare gli argomenti JVM per uno strumento e configurarlo per l'esecuzione in un processo separato. Attualmente è supportato solo lo strumento R8.

Crea profili di esecuzione e imposta il profilo di esecuzione predefinito nel file settings.gradle, come mostrato nell'esempio seguente:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Per eseguire l'override del profilo predefinito, seleziona un profilo diverso utilizzando la proprietà android.experimental.settings.executionProfile nel file gradle.properties:

android.experimental.settings.executionProfile=high

Puoi anche impostare questa proprietà utilizzando la riga di comando, che consente di impostare flussi di lavoro diversi. Ad esempio, se disponi di un flusso di lavoro di integrazione continua, puoi utilizzare la riga di comando per modificare il profilo di esecuzione senza dover modificare il file settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

JDK 17 necessario per eseguire AGP 8.0

Quando utilizzi il plug-in Android per Gradle 8.0 per creare la tua app, ora è necessario JDK 17 per eseguire Gradle. Android Studio Flamingo raggruppa JDK 17 e configura Gradle per utilizzarlo per impostazione predefinita, il che significa che la maggior parte degli utenti di Android Studio non deve apportare modifiche alla configurazione dei propri progetti.

Se devi impostare manualmente la versione JDK utilizzata da AGP in Android Studio, devi utilizzare JDK 17 o versioni successive.

Se utilizzi AGP indipendente da Android Studio, esegui l'upgrade della versione JDK impostando la variabile di ambiente JAVA_HOME o l'opzione della riga di comando -Dorg.gradle.java.home nella directory di installazione di JDK 17.