Plug-in Android per Gradle 4.1.0 (agosto 2020)
Compatibilità
| Versione minima | Versione predefinita | Note | |
|---|---|---|---|
| Gradle | 6,5 | N/D | Per saperne di più, consulta la sezione Aggiornare Gradle. |
| Strumenti di build dell'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 dell'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 di Kotlin Script DSL
Per migliorare l'esperienza di modifica per gli utenti di buildscript Kotlin, il DSL e le API del plug-in Android per Gradle 4.1 sono ora definiti in un insieme di interfacce Kotlin separatamente dalle relative classi di implementazione. Ciò significa che:
- La nullabilità e la mutabilità sono ora dichiarate in modo esplicito sui tipi Kotlin.
- La documentazione generata da queste interfacce viene pubblicata nel riferimento API Kotlin.
- La superficie API del plug-in Android per Gradle è definita chiaramente, in modo da rendere le estensioni delle build Android meno fragili in futuro.
Importante: se hai già adottato gli script di build KTS o utilizzi Kotlin in
buildSrc, questa operazione potrebbe causare interruzioni della compatibilità di origine per determinati errori
che si sarebbero manifestati come errori di runtime nelle release precedenti.
I tipi di raccolta progettati per essere modificati nel DSL sono ora uniformemente definiti come:
val collection: MutableCollectionType
Ciò significa che non è più possibile scrivere quanto segue negli script Kotlin per alcune raccolte che in precedenza lo supportavano:
collection = collectionTypeOf(...)
Tuttavia, la modifica 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 Android per Gradle, segnala un bug.
Esportare le dipendenze C/C++ dagli AAR
Il plug-in Android per Gradle 4.0 ha aggiunto la possibilità di importare pacchetti Prefab nelle dipendenze AAR. In AGP 4.1, è ora possibile esportare le librerie dalla build 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
verranno pacchettizzate nell'AAR prodotto dalla build nativa esterna ndk-build o CMake e ognuna esporterà le intestazioni dalla directory specificata ai relativi dipendenti.
Nota: per gli utenti del plug-in Android per Gradle 4.0 e versioni successive, le impostazioni di configurazione per l'importazione di librerie native predefinite sono cambiate. Per ulteriori informazioni, consulta le note di rilascio della versione 4.0.
Supporto di R8 per i metadati Kotlin
Kotlin utilizza metadati personalizzati nei file di classe Java per identificare i costrutti del linguaggio Kotlin. R8 ora supporta la manutenzione e la riscrittura dei metadati Kotlin
per supportare completamente la riduzione delle librerie e delle applicazioni Kotlin
utilizzando kotlin-reflect.
Per conservare i metadati Kotlin, aggiungi le seguenti regole di conservazione:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
In questo modo, R8 manterrà i metadati Kotlin per tutte le classi mantenute direttamente.
Per ulteriori informazioni, consulta l'articolo Shrinking Kotlin libraries and applications using Kotlin reflection with R8{:.external} su Medium.
Asserzioni nelle build di debug
Quando crei la versione di debug dell'app utilizzando il plug-in Android per Gradle 4.1.0 e versioni successive, il compilatore integrato (D8) riscrive il codice dell'app per abilitare le asserzioni in tempo di compilazione, in modo da avere sempre attivi i controlli delle asserzioni.
Modifiche al comportamento
Rimozione della cache di build del plug-in Android per Gradle
La cache di build AGP è stata rimossa in AGP 4.1. Introdotta in precedenza in AGP 2.3 per integrare la cache di build Gradle, la cache di build AGP è stata completamente sostituita dalla cache di build 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. La proprietà android.enableBuildCache al momento non ha alcun effetto,
mentre la proprietà android.buildCacheDir e l'attività cleanBuildCache
saranno funzionali fino ad AGP 7.0 per eliminare i contenuti della cache di build AGP
esistenti.
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ù mantenuti per impostazione predefinita, il che può comportare un notevole risparmio di spazio per le app che abilitano la riduzione del codice. Questa operazione non dovrebbe comportare una modifica del comportamento, a meno che tu non acceda alle classi R tramite reflection, 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 abilita la creazione di spazi dei nomi della classe R di ogni libreria in modo che la classe R includa solo le risorse dichiarate nella libreria stessa e nessuna delle dipendenze della libreria, riducendo così le dimensioni della classe R per la libreria.
Kotlin DSL: coreLibraryDesugaringEnabled rinominato
L'opzione di compilazione Kotlin DSL coreLibraryDesugaringEnabled è stata
modificata in isCoreLibraryDesugaringEnabled.
Per ulteriori informazioni su questo flag, consulta
Supporto per la rimozione dello zucchero sintattico delle API Java 8+ (plug-in Android per Gradle 4.0.0+).
Proprietà della versione rimosse dalla classe BuildConfig nei progetti di libreria
Solo per i progetti di libreria, le BuildConfig.VERSION_NAME e
BuildConfig.VERSION_CODE proprietà 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 quindi erano
fuorvianti. Inoltre, questi valori sono stati eliminati durante l'unione del manifest.
In una versione futura del plug-in Android per Gradle, le proprietà versionName e
versionCode verranno rimosse anche dal DSL per le librerie.
Al momento, non è possibile accedere automaticamente al codice/nome della versione dell'app
da un progetto secondario della libreria.
Per i moduli dell'applicazione non sono state apportate modifiche, puoi comunque assegnare valori a
versionCode e versionName nel DSL; questi valori verranno propagati ai
campi del manifest e di BuildConfig dell'app.
Impostare il percorso NDK
Puoi impostare il percorso dell'installazione NDK locale utilizzando la android.ndkPath
proprietà nel file build.gradle del modulo.
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}Se utilizzi questa proprietà insieme alla
android.ndkVersion proprietà,
questo percorso deve contenere una versione NDK che corrisponda a android.ndkVersion.
Modifiche al comportamento dei test delle unità della libreria
Abbiamo modificato il comportamento di compilazione ed esecuzione dei test delle unità della libreria. I test delle unità di una libreria vengono ora compilati ed eseguiti rispetto alle classi di compilazione/runtime della libreria stessa, il che significa che il test delle unità utilizza la libreria nello stesso modo in cui lo fanno i progetti secondari esterni. In genere, questa configurazione produce test migliori.
In alcuni casi, i test delle unità della libreria che utilizzano l'associazione di dati potrebbero riscontrare classi DataBindingComponent
o BR
mancanti. Questi test devono essere trasferiti a un test strumentato nel
androidTest progetto, poiché la compilazione e l'esecuzione rispetto a queste classi in
un test delle unità potrebbero 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 ulteriori informazioni sull' SDK Fabric deprecato e sulla migrazione all'SDK Firebase Crashlytics, consulta Eseguire l'upgrade all'SDK Firebase Crashlytics.