Plug-in Android Gradle 4.2.0 (marzo 2021)
Compatibilità
Versione minima | Versione predefinita | Notes | |
---|---|---|---|
Valutazione | 6.7.1 | N/A | Per scoprire di più, consulta la pagina sull'aggiornamento di Gradle. |
Strumenti per la creazione dell'SDK | 30.0.2 | 30.0.2 | Installa o configura gli strumenti di creazione 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à.
Versione 8 del linguaggio Java per impostazione predefinita
A partire dalla versione 4.2, AGP utilizzerà il livello di linguaggio Java 8 per impostazione predefinita. Java 8 fornisce l'accesso a una serie di funzionalità del linguaggio più recenti, tra cui espressioni lambda, riferimenti ai metodi e metodi dell'interfaccia statica. 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 del plug-in Android Gradle 4.2 sostituisce parti del compilatore di risorse AAPT2, migliorando potenzialmente le prestazioni della build, in particolare sui computer Windows. Il nuovo compilatore di risorse JVM è abilitato per impostazione predefinita.
firma v3 e v4 ora supportata
Il plug-in Android Gradle 4.2 supporta ora i formati di firma APK v3 e APK v4.
Per abilitare 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 consente di eseguire rapidamente il deployment di APK di grandi dimensioni utilizzando l'installazione dell'APK incrementale di 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 ciascuna 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 dalle 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, il che generava una grande quantità di messaggi informativi.
Se vuoi visualizzare l'intero output nativo, 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 di
<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
che
<var>projectDir</var>/app/gradle.properties
,
il valore di
<var>projectDir</var>/app/gradle.properties
avrà 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
cache di configurazione.
Per maggiori informazioni sull'impostazione dei valori nei file gradle.properties
, consulta la documentazione di Gradle.
Modifiche alla configurazione e alla compatibilità con Gradle
Quando viene eseguito in Android Studio, lo strumento di creazione Gradle utilizza il JDK in bundle di Studio. Nelle release precedenti, JDK 8 era fornito in bundle con Studio. Nella versione 4.2, tuttavia, JDK 11 è ora in bundle. Quando utilizzi il nuovo JDK in bundle per eseguire Gradle, ciò potrebbe causare 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 modificare il JDK utilizzato per eseguire Gradle nella finestra di dialogo Struttura del progetto. La modifica di questa impostazione cambierà solo il JDK utilizzato per eseguire Gradle e non verrà modificato il 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 su AGP sia in esecuzione Gradle 4.8.1 e versioni successive. Per maggiori informazioni sulla compatibilità di Gradle, consulta Aggiornare 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 delle build, ti consigliamo di testare le build 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, aggiungi una nuova opzione:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Per misurare la velocità della build con configurazioni diverse, consulta Profilo della build.
File DEX non compressi negli APK quando minSdk
= 28 o versioni successive
Per impostazione predefinita, AGP ora pacchettizza file DEX non compressi negli APK quando il valore di minSdk
= 28 o versioni successive. Questo determina un aumento delle dimensioni dell'APK, ma comporta anche
dimensioni di installazione inferiori sul dispositivo e dimensioni di download all'incirca uguali.
Per forzare AGP a pacchettizzare i file DEX compressi, puoi aggiungere quanto segue al file build.gradle
:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Utilizzare la DSL per creare pacchetti di librerie native compresse
Consigliamo di pacchettizzare le librerie native in formato non compresso, poiché ciò
determina dimensioni di installazione dell'app ridotte, dimensioni di download dell'app e tempi di caricamento
dell'app più rapidi per gli utenti. Tuttavia, se vuoi che il plug-in Android Gradle
pacchettizzi librerie native 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 del file manifest extractNativeLibs
. Per ulteriori informazioni, consulta la nota di rilascio Librerie native pacchettizzate non compresse per impostazione predefinita.