Plug-in Android per Gradle 8.1.0 (luglio 2023)

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

Compatibilità

Versione minima Versione predefinita Note
Gradle 8.0 8.0 Per scoprire di più, consulta la sezione Aggiornare Gradle.
Strumenti di compilazione SDK 33.0.1 33.0.1 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.

Kotlin DSL è il valore predefinito per la configurazione di build

Per impostazione predefinita, i nuovi progetti ora utilizzano il DSL Kotlin (build.gradle.kts) per la configurazione del build. Ciò offre un'esperienza di modifica migliore rispetto al DSL Groovy (build.gradle) con evidenziazione della sintassi, completamento del codice e navigazione alle dichiarazioni. Tieni presente che se utilizzi AGP 8.1 e il DSL Kotlin per la configurazione del build, devi utilizzare Gradle 8.1 per un'esperienza ottimale. Per saperne di più, consulta la guida alla migrazione di Kotlin DSL.

Supporto automatico della lingua per app

A partire da Android Studio Giraffe Canary 7 e AGP 8.1.0-alpha07, puoi configurare la tua app in modo da supportare automaticamente le preferenze linguistiche per app. In base alle risorse del progetto, il plug-in Android per Gradle genera il file LocaleConfig e aggiunge un riferimento al file manifest finale, quindi non dovrai più farlo manualmente. AGP utilizza le risorse nelle cartelle res dei moduli dell'app e eventuali dipendenze dei moduli della libreria per determinare le lingue da includere nel file LocaleConfig.

Tieni presente che la funzionalità di lingua automatica per app supporta le app che eseguono Android 13 (livello API 33) o versioni successive. Per utilizzare la funzionalità, devi impostare compileSdkVersion su 33 o una versione successiva. Per configurare le preferenze relative alle lingue per app per le versioni precedenti di Android, devi ancora utilizzare le API e i selettori di lingue in-app.

Per attivare il supporto automatico della lingua per app, specifica una lingua predefinita:

  1. Nella cartella res del modulo dell'app, crea un nuovo file denominato resources.properties.
  2. Nel file resources.properties, imposta le impostazioni internazionali predefinite con l'etichetta unqualifiedResLocale. Per formare i nomi delle impostazioni internazionali, combina il codice lingua con i codici script e regione facoltativi, separandoli ciascuno con un trattino:

    • Lingua: utilizza il codice ISO 639-1 di due o tre lettere.
    • Scrittura (facoltativa): utilizza il codice ISO 15924.
    • Regione (facoltativa): utilizza il codice ISO 3166-1-alpha-2 di due lettere o il codice UN_M.49 di tre cifre.

    Ad esempio, se la lingua predefinita è l'inglese americano:

        unqualifiedResLocale=en-US
        

AGP aggiunge questa impostazione internazionale predefinita e eventuali impostazioni internazionali alternative da te specificate, utilizzando le directory values-* nella cartella res, al file LocaleConfig generato automaticamente.

Il supporto automatico delle lingue per app è disattivato per impostazione predefinita. Per attivare la funzionalità, utilizza l'impostazione generateLocaleConfig nel blocco androidResources {} del file build.gradle.kts a livello di modulo (file build.gradle se utilizzi Groovy):

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint contiene bytecode che ha come target JVM 17

A partire da AGP 8.1.0-alpha04, Android Lint contiene bytecode che ha come target JVM 17. Se scrivi controlli lint personalizzati, devi compilare con JDK 17 o versioni successive e specificare jvmTarget = '17' nelle opzioni del compilatore Kotlin.

Per scoprire di più sullo strumento lint, consulta Migliorare il codice con i controlli lint.

L'impostazione di compressione delle librerie native è stata spostata in DSL

A partire da AGP 8.1.0-alpha10, riceverai un avviso se non configuri la compressione delle librerie native utilizzando il DSL anziché il manifest. Le seguenti indicazioni spiegano come aggiornare la configurazione per utilizzare il DSL. Per ricevere assistenza per l'esecuzione di questi aggiornamenti, utilizza l'Assistente all'upgrade AGP (Strumenti > Assistente all'upgrade AGP).

Per utilizzare le librerie native non compresse, rimuovi l'attributo android::extractNativeLibs dal file manifest e aggiungi il seguente codice al file build.gradle.kts a livello di modulo (file build.gradle se utilizzi Groovy):

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

Flag di compilazione sperimentali

Si tratta di flag sperimentali per la configurazione della build disponibili in AGP 8.1.

Segnala Aggiunto in Valore predefinito Note
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Se questa opzione viene attivata senza specificare configurazioni di firma, AGP utilizzerà la configurazione di firma di debug predefinita quando viene eseguita una compilazione profilabile o di debug. Questo flag è disattivato per impostazione predefinita per incoraggiare gli autori delle build a dichiarare configurazioni di firma di profilazione specifiche.
android.experimental.library.desugarAndroidTest AGP 8.0 false Questo flag consente ai creator di librerie di attivare la rimozione del codice non necessario per le librerie di base per gli APK di test senza influire sull'AAR prodotto, ad esempio tramite il linting. Abbiamo intenzione di supportare questo comportamento nell'API Variant.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Se abilitato, Gradle Managed Devices consente un tipo di dispositivo personalizzato definito dall'utente che può essere fornito da un plug-in. Questo flag deve essere attivato se vuoi utilizzare il plug-in Firebase Test Lab.
android.lint.printStackTrace AGP 8.0 false Se abilitato, Android lint stampa uno stack trace in caso di arresto anomalo. Questo flag ha le stesse funzionalità della variabile di ambiente LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Nessuno Specifica il numero massimo di dispositivi gestiti da Gradle (AVD) da attivare contemporaneamente in un determinato momento. Se il valore è 0 o negativo, non esiste un numero massimo di dispositivi.
android.experimental.testOptions.installApkTimeout AGP 8.0 Nessuno La durata del timeout in secondi per l'installazione di un APK. Se il valore è 0 o negativo, verrà impostato un valore predefinito da UTP.

Problemi risolti

Plug-in Android per Gradle 8.1.0

Problemi risolti
Plug-in Android per Gradle
Problemi di `com.android.build.gradle.tasks.ShaderCompile` con la cache di configurazione
L'aggiunta di risorse Java utilizzando le API AGP interrompe la cache di configurazione
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so è pacchettizzato all'interno dell'APK
KGP legge il manifest durante la configurazione, invalidando la cache di configurazione in caso di modifica del manifest
Messaggio di avviso sulla compilazione poco chiaro quando si verifica un problema nel manifest unito
L'upgrade ad AGP 7.4 genera un errore StackOverflowError
ClassNotFoundException nella funzionalità dinamica che dipende direttamente dal sottoprogetto della libreria Kotlin
processDebugUnitTestManifest non riesce con i segnaposto del manifest per le varianti di test
processDebugUnitTestManifest non riesce con i segnaposto del manifest per le varianti di test
La proprietà dello spazio dei nomi probabilmente appartiene a HasAndroidResources
Impossibile disattivare il messaggio "I file Gradle sono stati modificati dall'ultima sincronizzazione del progetto"
"Ti consigliamo di utilizzare un plug-in Gradle per Android più recente" quando non è disponibile una versione più recente
processDebugUnitTestManifest non riesce con i segnaposto del manifest per le varianti di test
Flag booleano per disattivare il controllo dell'SDK di compilazione in CheckAarMetadataTask
L'errore di compilazione si riferisce al livello API 34, che non esiste
L'impostazione della toolchain JVM non influisce sul valore targetCompatibility di JavaCompile
Le voci di link diretti di navigazione con domini con caratteri jolly non hanno un attributo "android:host" nel manifest unito
L'attività processDebugMainManifest non è riuscita dal plug-in Android per Gradle 8.1
Possiamo rimuovere AnalyticsRecordingTask?
I contenuti di output-metadata.json non sono coerenti
Possiamo rimuovere AnalyticsRecordingTask?
I contenuti di output-metadata.json non sono coerenti
L'impostazione della toolchain JVM non influisce sul valore targetCompatibility di JavaCompile
Le voci di link diretti di navigazione con domini con caratteri jolly non hanno un attributo "android:host" nel manifest unito
L'attività processDebugMainManifest non è riuscita dal plug-in Android per Gradle 8.1
Android Studio non rispetta la variabile di ambiente STUDIO_GRADLE_JDK
I tipi di origine personalizzati devono creare set di origini multi-flavor
DependenciesInfoBuilder ha bisogno di un aggiornamento dell'API e della documentazione
La trasformazione DexingNoClasspathTransform (minSdk >= 24) con target Java 11 non riesce a causa di membri nidificati mancanti
DslExtension.Builder.extendProjectWith() non funziona come descritto in Groovy
Aggiungi l'API VariantSelector.withFlavor che non utilizza kotlin.Pair
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) ha una mancata corrispondenza nella cache perché "proguard.txt" è cambiato
Il file manifest unito dell'app contiene gli attributi extractNativeLibs e useEmbeddedDex dalle dipendenze
AGP: esponi il percorso allo strumento AIDL e al file AIDL del framework come API pubblica
Richiesta: consentire all'IDE di offrire una correzione per "PermittedSubclasses richiede ASM9"
Bug: l'opzione "Abilita KSP e utilizza il relativo elaboratore per questa dipendenza" rimanda a un sito web
Gradle 8.1 interrompe la memorizzazione nella cache della configurazione a causa di .gradle/.android/analytics.settings
generateLocaleConfig in agp 8.1.0 utilizza un ordinamento non deterministico, interrompendo le build riproducibili
Dexer (D8)
L'app si arresta in modo anomalo dopo gli aggiornamenti recenti a causa della rimozione del codice non necessario dalla libreria di base.
Regressione di agp 8.1.0 con API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Controllo non riuscito: !method->IsAbstract()
Lint
Lint controlla i trasferimenti sicuri solo per le interfacce implementate direttamente, non per quelle ereditate
Lint non controlla le trasmissioni valide per i destinatari delle chiamate
TypedArray#close (API 31) non desugared, ma AS non mostra avviso se utilizzato in try-with-resources
Bug: avviso di falso positivo "Il provider "BC" è deprecato e a partire da Android P…"
Falso positivo di Lint relativo a remember dopo l'upgrade di Kotlin a 1.8.0
Avviso Lint falso positivo per i controlli SDK_INT eseguiti all'interno di un metodo con un parametro enum
Il controllo lint TypographyQuotes non funziona con le virgolette emesse
Il controllo lint TrustAllX509TrustManager segnala erroneamente le interfacce che estendono X509TrustManager
Riformattazione solo del codice inserito di una correzione della sostituzione
Lint: l'anteprima dell'intenzione genera un'eccezione per la correzione rapida sostituisciStringa
Shrinker (R8)
VerifyError: il verificatore ha rifiutato la classe quando si utilizza R8 con Kotlin 1.8.20
R8 su AGP 8 interrompe il servizio Google Fit
L'inclusione delle informazioni del file di origine con nomi residui che si sovrappongono ai nomi di input non è rappresentata correttamente
R8 non riesce a compilare Compose con ArrayIndexOutOfBoundsException
Il codice relativo a StringBuilder semplice non ha la chiamata finale per l'aggiunta in modalità di rilascio o debuggable=false
Un caso limite nel metodo VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()
dex-startup-optimization genera java.lang.VerifyError: Rejecting class
Arresto anomalo con errore di verifica su Android 12 e versioni successive

Plug-in Android per Gradle 8.1.1

Problemi risolti
Dexer (D8)
Record Java 16: equals(null) genera NullPointerException
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
La compilazione si blocca su :minifyReleaseWithR8 quando si utilizza la libreria Apache POI
Rifiuto dell'invocazione quando è attivata l'ottimizzazione R8
NoClassDefFoundError per java.lang.reflect.Executable

Plug-in Android per Gradle 8.1.2

Problemi risolti
Plug-in Android per Gradle
androidResources non è disponibile nel modulo della libreria Android
[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
Shrinker (R8)
Kotlin 1.9 causa l'eliminazione delle lambda di Kotlin da parte di R8 se vengono rimossi i controlli null
R8 non riesce con il messaggio "Valore non definito rilevato durante la compilazione" per play-services-measurement-21.3.0-runtime.jar

Plug-in Android per Gradle 8.1.3

Problemi risolti
Plug-in Android per Gradle
[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
Errore di compilazione dopo l'aggiornamento ad AGP 8.1

Plug-in Android per Gradle 8.1.4

Problemi risolti
Plug-in Android per Gradle
Non eseguire l'attività di decompilazione sui classi dei sottoprogetti se sono già stati decompilati tramite le trasformazioni degli elementi