Plug-in Android per Gradle 4.2.0 (marzo 2021)
Compatibilità
| Versione minima | Versione predefinita | Note | |
|---|---|---|---|
| Gradle | 6.7.1 | N/A | Per saperne di più, consulta la sezione Aggiornare Gradle. |
| Strumenti di compilazione dell'SDK | 30.0.2 | 30.0.2 | Installa o configura gli strumenti di compilazione dell'SDK. |
| NDK | N/A | 21.4.7075529 | Installa o configura una versione diversa dell'NDK. |
Nuove funzionalità
Questa versione del plug-in Android per Gradle include le seguenti nuove funzionalità.
Linguaggio Java versione 8 per impostazione predefinita
A partire dalla versione 4.2, AGP utilizzerà il livello di linguaggio Java 8 per impostazione predefinita. Java 8 fornisce accesso a una serie di funzionalità del linguaggio più recenti, tra cui espressioni lambda, riferimenti ai metodi e metodi di interfaccia statici. Per l'elenco completo delle funzionalità supportate, consulta la documentazione di Java 8.
Per mantenere il comportamento precedente, specifica Java 7 in modo esplicito nel file build.gradle.kts o build.gradle a livello di modulo:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}Nuovo compilatore di risorse JVM
Un nuovo compilatore di risorse JVM nello strumento Android Gradle Plugin 4.2 sostituisce parti del compilatore di risorse AAPT2, migliorando potenzialmente le prestazioni di compilazione, soprattutto sulle macchine Windows. Il nuovo compilatore di risorse JVM è abilitato per impostazione predefinita.
Firme v3 e v4 ora supportate
Il plug-in Android per Gradle 4.2 ora supporta i formati di firma APK v3 e APK v4.
Per attivare uno o entrambi questi formati nella build, aggiungi le seguenti proprietà al file build.gradle o build.gradle.kts a livello di modulo:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}La firma dell'APK v4 ti consente di eseguire rapidamente il deployment di APK di grandi dimensioni utilizzando l'installazione incrementale dell'APK ADB in Android 11. Questo nuovo flag si occupa del passaggio di firma dell'APK nel processo di deployment.
Configura la firma dell'app per variante
Ora è possibile attivare o disattivare la firma dell'app nel plug-in Android per Gradle per variante.
Questo esempio mostra come impostare la firma dell'app per variante utilizzando il metodo onVariants() in Kotlin o Groovy:
androidComponents {
onVariants(selector().withName("fooDebug")) {
signingConfig {
enableV1Signing false
enableV2Signing true
}
}
}
Nuova proprietà Gradle:
android.native.buildOutput
Per ridurre il disordine nell'output della compilazione, AGP 4.2 filtra i messaggi
delle build C/C++ che utilizzano CMake e ndk-build,
mostrando solo l'output del compilatore C/C++ per impostazione predefinita. In precedenza, veniva generata una riga di output
per ogni file creato, il che comportava la generazione di una grande quantità di
messaggi informativi.
Se vuoi visualizzare l'intero output C/C++, imposta la nuova proprietà Gradle android.native.buildOutput su verbose.
Puoi impostare questa proprietà nel file gradle.properties o tramite la riga di comando.
gradle.properties
android.native.buildOutput=verbose
Riga di comando
-Pandroid.native.buildOutput=verbose
Il valore predefinito di questa proprietà è quiet.
Modifica del comportamento per i file gradle.properties
A partire da AGP 4.2, non è più possibile eseguire l'override delle proprietà Gradle
dai progetti secondari. In altre parole, se dichiari una proprietà in un file
gradle.properties in un progetto secondario anziché nel progetto
principale, questa verrà ignorata.
Ad esempio, nelle release precedenti, AGP leggeva i valori da
<var>projectDir</var>/gradle.properties,
<var>projectDir</var>/app/gradle.properties,
<var>projectDir</var>/library/gradle.properties,
e così via. Per i moduli dell'app, se la stessa proprietà Gradle era presente sia in
<var>projectDir</var>/gradle.properties
sia in
<var>projectDir</var>/app/gradle.properties,
il valore di
<var>projectDir</var>/app/gradle.properties
aveva la precedenza.
In AGP 4.2, questo comportamento è stato modificato e AGP non caricherà i valori da
gradle.properties nei sottoprogetti (ad es.
<var>projectDir</var>/app/gradle.properties).
Questa modifica riflette il
nuovo comportamento di Gradle e supporta la
memorizzazione nella cache della configurazione
Per ulteriori informazioni sull'impostazione dei valori nei file gradle.properties, consulta la documentazione di Gradle.
Modifiche alla compatibilità e alla configurazione di Gradle
Quando viene eseguito in Android Studio, lo strumento di build Gradle utilizza il JDK integrato di Studio. Nelle release precedenti, JDK 8 era incluso in Studio. Nella versione 4.2, tuttavia, ora è incluso JDK 11. Quando utilizzi il nuovo JDK in bundle per eseguire Gradle, potrebbero verificarsi alcune incompatibilità o un impatto sulle prestazioni della JVM a causa delle modifiche al garbage collector. Questi problemi sono descritti di seguito.
Nota: anche se consigliamo di eseguire Gradle con JDK 11, è possibile modificare il JDK utilizzata per eseguire Gradle nella finestra di dialogo Struttura progetto. La modifica di questa impostazione cambierà solo il JDK utilizzato per eseguire Gradle e non cambierà il JDK utilizzato per eseguire Studio stesso.
Compatibilità di Studio con il plug-in Android per Gradle (AGP)
Android Studio 4.2 può aprire progetti che utilizzano AGP 3.1 e versioni successive, a condizione che AGP esegua Gradle 4.8.1 e versioni successive. Per ulteriori informazioni sulla compatibilità di Gradle, consulta Aggiorna Gradle.
Ottimizzazione delle build Gradle per JDK 11
Questo aggiornamento a JDK 11 influisce sulla configurazione predefinita del garbage collector JVM, poiché JDK 8 utilizza il garbage collector parallelo, mentre JDK 11 utilizza il garbage collector G1.
Per migliorare potenzialmente le prestazioni di compilazione, ti consigliamo di
testare le build Gradle con il
garbage collector parallelo. In gradle.properties imposta quanto segue:
org.gradle.jvmargs=-XX:+UseParallelGCSe in questo campo sono già impostate altre opzioni, aggiungi una nuova opzione:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCPer misurare la velocità di build con configurazioni diverse, consulta Profila la build.
File DEX non compressi negli APK quando minSdk = 28 o superiore
Ora AGP pacchettizza i file DEX non compressi negli APK per impostazione predefinita quando minSdk = 28 o superiore. In questo modo, le dimensioni dell'APK aumentano, ma quelle di installazione sul dispositivo sono inferiori e le dimensioni di download sono approssimativamente le stesse.
Per forzare AGP a pacchettizzare i file DEX compressi, puoi aggiungere quanto segue al file build.gradle:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Utilizza il DSL per pacchettizzare le librerie C/C++ compresse
Ti consigliamo di pacchettizzare le librerie C/C++ in formato non compresso, perché in questo modo le dimensioni di installazione e download dell'app sono inferiori e i tempi di caricamento dell'app sono più rapidi per gli utenti. Tuttavia, se vuoi che il plug-in Android per Gradle pacchettizzi le librerie C/C++ compresse durante la creazione dell'app, imposta useLegacyPackaging su true nel file build.gradle dell'app:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Il flag useLegacyPackaging sostituisce l'attributo manifest extractNativeLibs. Per ulteriori informazioni, consulta la nota di rilascio
Librerie native pacchettizzate non compresse per impostazione predefinita.