Plug-in Android per Gradle 4.1.0 (agosto 2020)

Compatibilità

Versione minima Versione predefinita Note
Gradle 6.5 N/D Per scoprire di più, consulta la sezione Aggiornare Gradle.
Strumenti di compilazione SDK 29.0.2 29.0.2 Installa o configura gli strumenti di compilazione dell'SDK.
NDK N/D 21.1.6352462 Installa o configura una versione diversa del NDK.

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

Nuove funzionalità

Questa versione del plug-in Android per Gradle include le seguenti nuove funzionalità.

Supporto DSL di Kotlin Script

Per contribuire a migliorare l'esperienza di modifica per gli utenti di buildscript di Kotlin, il DSL e le API del plug-in Gradle per Android 4.1 ora sono definiti in un insieme di interfacce Kotlin separatamente dalle relative classi di implementazione. Ciò significa che:

  • Ora la nullabilità e la mutabilità vengono dichiarate esplicitamente nei tipi Kotlin.
  • La documentazione generata da queste interfacce viene pubblicata nel riferimento all'API Kotlin.
  • La superficie API del plug-in Android per Gradle è chiaramente definita per rendere meno fragile l'estensione delle build Android in futuro.

Importante: se hai già adottato gli script di compilazione KTS o utilizzi Kotlin in buildSrc, questo potrebbe causare interruzioni della compatibilità del codice sorgente per determinati errori che si sarebbero manifestati come errori di runtime nelle release precedenti.

I tipi di raccolte progettati per essere sottoposti a mutazione nel DSL ora sono uniformemente definiti come:

val collection: MutableCollectionType

Ciò significa che non è più possibile scrivere quanto segue negli script Kotlin per alcune raccolte che lo supportavano in precedenza:

collection = collectionTypeOf(...)

Tuttavia, la mutazione della raccolta è supportata in modo uniforme, quindi collection += … e collection.add(...) ora dovrebbero funzionare ovunque.

Se riscontri problemi durante l'upgrade di un progetto che utilizza le API e il DSL Kotlin del plug-in Gradle per Android, segnala un bug.

Esportare le dipendenze C/C++ dagli AAR

Il plug-in Android per Gradle 4.0 ha aggiunto la possibilità di importare i pacchetti prefab nelle dipendenze AAR. In AGP 4.1, ora è possibile esportare le librerie dalla compilazione nativa esterna in un AAR per un progetto di libreria Android.

Per esportare le librerie native, aggiungi quanto segue al blocco android del file build.gradle del progetto della libreria:

buildFeatures {
    prefabPublishing true
}

prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }

<var>myotherlibrary</var> {
    headers "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

buildFeatures {
    prefabPublishing = true
}

prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }

create("<var>myotherlibrary</var>") {
    headers = "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

In questo esempio, le librerie mylibrary e myotherlibrary di ndk-build o della compilazione nativa esterna CMake verranno pacchettizzate nell'AAR prodotto dalla compilazione e ciascuna esporterà le intestazioni dalla directory specificata alle relative dipendenze.

Nota: per gli utenti del plug-in Android per Gradle 4.0 e versioni successive, le impostazioni di configurazione per l'importazione delle librerie native predefinite sono cambiate. Per ulteriori informazioni, consulta le note di rilascio 4.0.

Supporto di R8 per i metadati Kotlin

Kotlin utilizza metadati personalizzati nei file di class Java per identificare i costrutti del linguaggio Kotlin. R8 ora supporta la gestione e la riscrittura dei metadati Kotlin per supportare completamente la riduzione delle librerie e delle applicazioni Kotlin utilizzando kotlin-reflect.

Per conservare i metadati di Kotlin, aggiungi le seguenti regole keep:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

In questo modo, R8 viene incaricato di conservare i metadati Kotlin per tutte le classi conservate direttamente.

Per ulteriori informazioni, consulta Riduci le librerie e le applicazioni Kotlin utilizzando la riflessione Kotlin con R8{:.external} su Medium.

Verifiche nelle build di debug

Quando compili la versione di debug della tua app utilizzando il plug-in Android Gradle 4.1.0 o versioni successive, il compilatore integrato (D8) riscriverà il codice dell'app per attivare le asserzioni in fase di compilazione, in modo da avere sempre attivi i controlli delle asserzioni.

Modifiche al comportamento

La cache di compilazione del plug-in Android per Gradle è stata rimossa

La cache di compilazione AGP è stata rimossa in AGP 4.1. Precedentemente introdotta in AGP 2.3 per integrare la cache di compilazione di Gradle, la cache di compilazione di AGP è stata sostituita completamente dalla cache di compilazione di Gradle in AGP 4.1. Questa modifica non influisce sul tempo di compilazione.

L'attività cleanBuildCache e le proprietà android.enableBuildCache e android.buildCacheDir sono deprecate e verranno rimosse in AGP 7.0. Al momento la proprietà android.enableBuildCache non ha alcun effetto, mentre la proprietà android.buildCacheDir e il compito cleanBuildCache saranno funzionali fino ad AGP 7.0 per l'eliminazione di eventuali contenuti esistenti della cache di compilazione di AGP.

Dimensioni dell'app ridotte in modo significativo per le app che utilizzano la riduzione del codice

A partire da questa release, i campi delle classi R non vengono più conservati per impostazione predefinita, il che può comportare risparmi significativi delle dimensioni degli APK per le app che attivano la riduzione del codice. Ciò non dovrebbe comportare una modifica del comportamento, a meno che non acceda alle classi R tramite la riflessione, nel qual caso è necessario aggiungere regole di conservazione per queste classi R.

La proprietà android.namespacedRClass è stata rinominata in android.nonTransitiveRClass

Il flag sperimentale android.namespacedRClass è stato rinominato in android.nonTransitiveRClass.

Impostato nel file gradle.properties, questo flag attiva lo spazio dei nomi della classe R di ogni biblioteca in modo che includa solo le risorse dichiarate nella biblioteca stessa e nessuna delle dipendenze della biblioteca, riducendo così le dimensioni della classe R per la biblioteca.

DSL Kotlin: coreLibraryDesugaringEnabled è stato rinominato

L'opzione di compilazione Kotlin DSL coreLibraryDesugaringEnabled è stata modificata in isCoreLibraryDesugaringEnabled. Per ulteriori informazioni su questo flag, consulta Supporto per il desugaring delle API Java 8 e versioni successive (plug-in Android Gradle 4.0.0 e versioni successive).

Le proprietà della versione sono state rimosse dalla classe BuildConfig nei progetti della libreria

Solo per i progetti di librerie, le proprietà BuildConfig.VERSION_NAME e BuildConfig.VERSION_CODE sono state rimosse dalla classe BuildConfig generata perché questi valori statici non riflettevano i valori finali del codice e del nome della versione dell'applicazione e pertanto erano fuorvianti. Inoltre, questi valori sono stati ignorati durante l'unione del manifest.

In una versione futura del plug-in Android per Gradle, anche le proprietà versionName e versionCode verranno rimosse dal DSL per le librerie. Al momento non è possibile accedere automaticamente al codice/al nome della versione dell'app da un sottoprogetto della libreria.

Per i moduli dell'applicazione, non è prevista alcuna modifica. Puoi comunque assegnare valori a versionCode e versionName nel DSL. Questi valori verranno propagati ai campi BuildConfig e manifest dell'app.

Imposta il percorso dell'NDK

Puoi impostare il percorso dell'installazione NDK locale utilizzando la proprietà android.ndkPath nel file build.gradle del modulo.


android {
  ndkPath "your-custom-ndk-path"
}

android {
  ndkPath = "your-custom-ndk-path"
}

Se utilizzi questa proprietà insieme alla proprietà android.ndkVersion, questo percorso deve contenere una versione NDK corrispondente a android.ndkVersion.

Modifiche al comportamento dei test delle unità della libreria

Abbiamo modificato il comportamento della compilazione e dell'esecuzione dei test delle unità della libreria. I test di unità di una biblioteca ora vengono compilati ed eseguiti in base alle classi di compilazione/runtime della biblioteca stessa, con il risultato che il test di unità utilizza la libreria nello stesso modo dei sottoprogetti esterni. In genere, questa configurazione consente di eseguire test migliori.

In alcuni casi, i test di unità della libreria che utilizzano il binding dei dati potrebbero rilevare classi DataBindingComponent o BR mancanti. Questi test devono essere trasferiti a un test strumentato nel progetto androidTest, poiché la compilazione ed esecuzione con queste classi in un test di unità potrebbe produrre un output errato.

Plug-in Gradle io.fabric deprecato

Il plug-in Gradle io.fabric è deprecato e non è compatibile con la versione 4.1 del plug-in Android per Gradle. Per saperne di più sull'SDK Fabric ritirato e sulla migrazione all'SDK Firebase Crashlytics, consulta Eseguire l'upgrade all'SDK Firebase Crashlytics.