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.