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 creazione 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 Kotlin buildscript, la DSL e le API di Android Gradle Plugin 4.1 sono ora definite in un insieme di interfacce Kotlin separatamente dalle classi di implementazione. Ciò significa che:

  • La nullabilità e la modificabilità sono ora dichiarate in modo esplicito nei 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, per rendere meno fragile l'estensione delle build Android in futuro.

Importante: se hai già adottato script di build KTS o utilizzi Kotlin in buildSrc, ciò potrebbe causare interruzioni della compatibilità con l'origine per determinati errori che si sarebbero manifestati come errori di runtime nelle versioni precedenti.

I tipi di raccolta progettati per essere modificati nel DSL sono ora definiti in modo uniforme 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 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 del plug-in Android Gradle Kotlin, 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 della build nativa esterna ndk-build o CMake verranno inserite nel file AAR prodotto dalla build e ognuna esporterà le intestazioni dalla directory specificata ai relativi elementi 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 precompilate 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 di librerie e 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 della tua app utilizzando il plug-in Android Gradle 4.1.0 e versioni successive, il compilatore integrato (D8) riscrive 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

Cache di compilazione del plug-in Android per Gradle rimossa

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 obsolete e verranno rimosse in AGP 7.0. La proprietà android.enableBuildCache non ha attualmente alcun effetto, mentre la proprietà android.buildCacheDir e l'attività cleanBuildCache saranno funzionali fino ad AGP 7.0 per l'eliminazione di eventuali 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ù conservati per impostazione predefinita, il che potrebbe comportare un notevole risparmio di spazio nell'APK per le app che attivano la riduzione del codice. Ciò 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 attiva lo spazio dei nomi di ogni classe R della libreria in modo che includa solo le risorse dichiarate nella libreria stessa e nessuna delle dipendenze della libreria, riducendo così le dimensioni della classe R per quella libreria.

Kotlin DSL: coreLibraryDesugaringEnabled rinominato

L'opzione di compilazione Kotlin DSL coreLibraryDesugaringEnabled è stata modificata in isCoreLibraryDesugaringEnabled. Per saperne di più su questo flag, consulta Supporto per il desugaring 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 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 nome e del codice di versione dell'applicazione ed erano quindi fuorvianti. Inoltre, questi valori sono stati eliminati durante l'unione dei 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/nome della versione dell'app da un sottoprogetto della libreria.

Per i moduli dell'applicazione, non sono previste modifiche. Puoi comunque assegnare valori a versionCode e versionName nel DSL. Questi valori verranno propagati ai campi manifest e BuildConfig dell'app.

Imposta il percorso NDK

Puoi impostare il percorso dell'installazione locale di NDK 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 dell'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 unitari di una libreria vengono ora compilati ed eseguiti rispetto alle classi di compilazione/runtime della libreria stessa, il che comporta che il test unitario utilizzi la libreria nello stesso modo in cui lo fanno i sottoprogetti esterni. Questa configurazione in genere produce test migliori.

In alcuni casi, i test delle unità della libreria che utilizzano il data binding potrebbero riscontrare classi DataBindingComponent o BR mancanti. Questi test devono essere trasferiti a un test strumentato nel progetto androidTest, 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 è ritirato 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.