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 creazione dell'SDK.
NDK N/D 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 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 build, soprattutto 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 tua 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 di ADB in Android 11. Questo nuovo flag gestisce il passaggio di firma dell'APK nella procedura di deployment.

Configurare la firma dell'app per variante

Ora è possibile attivare o disattivare la firma dell'app nel plug-in Android 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.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 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 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 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 radice, verrà ignorata.

Ad esempio, nelle versioni 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 la JDK in bundle di Studio. Nelle versioni precedenti, JDK 8 era incluso in Studio. Nella versione 4.2, invece, è incluso JDK 11. Quando utilizzi il nuovo JDK in bundle per eseguire Gradle, ciò potrebbe causare alcune incompatibilità o influire 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 la JDK utilizzata per eseguire Gradle nella finestra di dialogo Struttura progetto. La modifica di questa impostazione cambierà solo la JDK utilizzata per eseguire Gradle e non cambierà la JDK utilizzata 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 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 di 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, aggiungine una nuova:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

Per misurare la velocità di compilazione con configurazioni diverse, consulta Profilare la compilazione.

File DEX non compressi negli APK quando minSdk = 28 o versioni successive

AGP ora comprime i file DEX negli APK per impostazione predefinita quando minSdk = 28 o superiore. Ciò comporta un aumento delle dimensioni dell'APK, ma una riduzione delle dimensioni di installazione sul dispositivo e le dimensioni di download sono più o meno le stesse.

Per forzare AGP a comprimere i file DEX, puoi aggiungere quanto segue al file build.gradle:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Utilizza la DSL per creare pacchetti di librerie native compresse

Ti consigliamo di comprimere le librerie native in formato non compresso, perché questo comporta dimensioni di installazione dell'app più ridotte, dimensioni di download dell'app più ridotte e tempi di caricamento dell'app più rapidi per i tuoi utenti. Tuttavia, se vuoi che il plug-in Android Gradle pacchetti le 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 manifest extractNativeLibs. Per ulteriori informazioni, consulta le note di rilascio Librerie native compresse per impostazione predefinita.