Plug-in Android per Gradle 4.2.0 (marzo 2021)
Compatibilità
Versione minima | Versione predefinita | Note | |
---|---|---|---|
Gradle | 6.7.1 | N/D | Per scoprire di più, consulta la sezione Aggiornare Gradle. |
Strumenti di compilazione SDK | 30.0.2 | 30.0.2 | Installa o configura gli strumenti di compilazione dell'SDK. |
NDK | N/D | 21.4.7075529 | Installa o configura una versione diversa del NDK. |
Nuove funzionalità
Questa versione del plug-in Android per Gradle include le seguenti nuove funzionalità.
Versione del linguaggio Java 8 per impostazione predefinita
A partire dalla versione 4.2, AGP utilizzerà per impostazione predefinita il livello di linguaggio Java 8. Java 8 fornisce l'accesso a una serie di funzionalità di linguaggio più recenti, tra cui espressioni lambda, riferimenti a metodi e metodi di interfaccia statici. Per l'elenco completo delle funzionalità supportate, consulta la documentazione di Java 8.
Per mantenere il vecchio comportamento, specifica Java 7 esplicitamente 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 del plug-in Android Gradle 4.2 sostituisce parti del compilatore di risorse AAPT2, potenzialmente migliorando le prestazioni di compilazione, in particolare su macchine Windows. Il nuovo compilatore di risorse JVM è abilitato per impostazione predefinita.
Firma v3 e v4 ora supportata
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 compilazione, 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 implementare rapidamente APK di grandi dimensioni utilizzando l'installazione incrementale dell'APK tramite ADB in Android 11. Questo nuovo flag gestisce il passaggio di firma dell'APK nel processo di deployment.
Configurare la firma dell'app per variante
Ora è possibile attivare o disattivare la firma dell'app nel plug-in Android Gradle per ogni 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.set(false)
signingConfig.enableV2Signing.set(true)
})
Nuova proprietà Gradle:
android.native.buildOutput
Per ridurre il disordine nell'output della build, AGP 4.2 filtra i messaggi
delle build native che utilizzano CMake e ndk-build
,
mostrando per impostazione predefinita solo l'output del compilatore C/C++. In precedenza, veniva generata una riga di output per ogni file creato, con una grande quantità di messaggi informativi.
Se vuoi visualizzare l'intera output nativa, 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 dei file gradle.properties
A partire da AGP 4.2, non è più possibile eseguire l'override delle proprietà Gradle
dai sottoprogetti. In altre parole, se dichiari una proprietà in un
file gradle.properties
in un sottoprogetto 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
,
ecc. Per i moduli dell'app, se la stessa proprietà Gradle era presente sia in
<var>projectDir</var>/gradle.properties
che 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 carica 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 compilazione Gradle utilizza il JDK incluso in Studio. Nelle release precedenti, JDK 8 era incluso in Studio. Tuttavia, in 4.2, JDK 11 è ora incluso nel pacchetto. L'utilizzo del nuovo JDK in bundle per eseguire Gradle potrebbe comportare alcune incompatibilità o influire sulle prestazioni della JVM a causa di modifiche al garbage collector. Questi problemi sono descritti di seguito.
Nota: anche se consigliamo di eseguire Gradle con JDK 11, è possibile cambiare il JDK utilizzato per eseguire Gradle nella finestra di dialogo Struttura progetto. La modifica di questa impostazione comporterà la modifica solo del JDK utilizzato per eseguire Gradle e non del JDK utilizzato per eseguire Studio stesso.
Compatibilità di Studio con il plug-in Android 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 Aggiornare Gradle.
Ottimizzazione delle build di 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 di Gradle con il garbage collector parallelo. In gradle.properties
, imposta quanto segue:
org.gradle.jvmargs=-XX:+UseParallelGC
Se in questo campo sono già impostate altre opzioni, aggiungine una nuova:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Per misurare la velocità di compilazione con configurazioni diverse, consulta Eseguire il profiling della compilazione.
File DEX non compressi negli APK quando minSdk
= 28 o versioni successive
AGP ora pacchettizza i file DEX non compressi negli APK per impostazione predefinita quando minSdk
= 28 o superiore. Ciò comporta un aumento delle dimensioni dell'APK, ma consente di ridurre le dimensioni dell'installazione sul dispositivo e le dimensioni del download rimangono pressoché invariate.
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 native compresse
Ti consigliamo di pacchettizzare le librerie native in formato non compresso, perché questo consente di ridurre le dimensioni dell'installazione e del download dell'app, nonché il tempo di caricamento dell'app per gli utenti. Tuttavia, se vuoi che il plug-in Gradle per Android impacchetti le librerie native compresse durante la compilazione 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.