Plug-in Android per Gradle 7.1.0 (gennaio 2022)
Il plug-in Android per Gradle 7.1.0 è una release principale che include una serie di nuove funzionalità e miglioramenti.
7.1.3 (aprile 2022)
Questo aggiornamento secondario include le seguenti correzioni di bug:
- Problemi di classi duplicate segnalati da R8
Per visualizzare un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog sulla patch 3 di Android Studio Bumblebee.
7.1.2 (febbraio 2022)
Questo aggiornamento secondario include le seguenti correzioni di bug:
- Il plug-in Android per Gradle 7.1.0-rc01 non riesce a eseguire la trasformazione del bytecode ASM durante i test delle unità
- La sincronizzazione di Gradle non riesce e viene visualizzato il messaggio "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'."
- Alcuni nuovi blocchi DSL non possono essere utilizzati dalla DSL Groovy nel plug-in Android per Gradle 7.0.0
- Nuova API di pubblicazione AGP 7.1: il file JAR javadoc creato non viene firmato
- ClassesDataSourceCache deve utilizzare l'ultima versione di Asm
- Android Studio BumbleBee non esegue sempre il deployment delle ultime modifiche
Per visualizzare un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog sulla patch 2 di Android Studio Bumblebee.
7.1.1 (febbraio 2022)
Questo aggiornamento secondario corrisponde al rilascio di Android Studio Bumblebee Patch 1.
Per visualizzare un elenco delle correzioni di bug incluse in questa release, consulta il post del blog sulla patch 1 di Android Studio Bumblebee.
Compatibilità
Versione minima | Versione predefinita | Note | |
---|---|---|---|
Gradle | 7.2 | 7.2 | Per scoprire di più, consulta la sezione Aggiornare Gradle. |
Strumenti di compilazione SDK | 30.0.3 | 30.0.3 | Installa o configura gli strumenti di creazione dell'SDK. |
NDK | N/D | 21.4.7075529 | Installa o configura una versione diversa dell'NDK. |
JDK | 11 | 11 | Per saperne di più, vedi Impostare la versione di JDK. |
L'attività di analisi Lint ora è memorizzabile nella cache
AndroidLintAnalysisTask
ora è compatibile con la
cache di build
Gradle. Se abiliti la cache di build impostando
org.gradle.caching=true
nel file gradle.properties
, l'attività di analisi lint otterrà l'output dalla cache di build quando
possibile.
L'attività di analisi lint è spesso il collo di bottiglia più grande quando si esegue lint con il plug-in Android Gradle, quindi l'attivazione della cache di build migliora la velocità di build quando si esegue lint in molte situazioni. Dovresti notare un miglioramento significativo delle prestazioni, ad esempio se hai un progetto multimodulo e pulisci la directory di build prima di eseguire lint sul server CI.
Ora i moduli C/C++ possono fare riferimento ad altri moduli C/C++ nello stesso progetto.
Ora è possibile configurare un modulo Gradle Android con codice C/C++ in modo che faccia riferimento ai file di intestazione e al codice della libreria in un altro modulo Gradle. Il protocollo Prefab viene utilizzato per comunicare le intestazioni e le librerie tra i moduli Gradle.
Requisiti
-
Il modulo consuming deve essere
CMake
e nonndk-build
. Il supporto di ndk-build richiederà un futuro aggiornamento dell'NDK. Il modulo publishing può essereCMake
ondk-build
. -
Il modulo consuming deve attivare
prefab
nel filebuild.gradle
.
android {
buildFeatures {
prefab true
}
}
- Il modulo publishing deve abilitare
prefabPublishing
nel filebuild.gradle
.
android {
buildFeatures {
prefabPublishing true
}
}
- Il modulo consuming deve fare riferimento al modulo publishing
aggiungendo una riga nel blocco
dependencies
del filebuild.gradle
. Ad esempio:
dependencies {
implementation project(':mylibrary')
}
- Il modulo publishing deve esporre un pacchetto utilizzando una
sezione
prefab
. Ad esempio:
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}
- Il file
CMakeLists.txt
del modulo di consumo potrebbe utilizzarefind_package()
per individuare il pacchetto pubblicato dal modulo di produzione. Ad esempio:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)
- Deve essere presente un STL per l'intera applicazione. Ad esempio, sia i moduli di consumo che quelli di pubblicazione possono utilizzare STL condivisa C++.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}
Per ulteriori spiegazioni su come configurare i consumer e i produttori AAR nativi con AGP, consulta Dipendenze native con AGP.
Impostazioni del repository nel file settings.gradle
Quando viene creato un nuovo progetto in Android Studio Bumblebee, il file
build.gradle
di primo livello contiene il blocco plugins
,
seguito dal codice per pulire la directory di build:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Le impostazioni del repository che in precedenza si trovavano nel file build.gradle
di primo livello ora si trovano nel file settings.gradle
:
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'
Il file build.gradle
a livello di modulo non è cambiato. Pertanto, utilizza il file build.gradle
di primo livello e il file settings.gradle
per definire le configurazioni di build che si applicano a tutti i moduli del progetto oppure i repository e le dipendenze che si applicano a Gradle stesso; utilizza il file build.gradle
a livello di modulo per definire le configurazioni di build specifiche per un determinato modulo all'interno del progetto.
Riduzione delle risorse migliorata
Android Studio Bumblebee include un riduttore di risorse migliorato che consente di ridurre le dimensioni dell'app.
Supporto per app con funzionalità dinamiche
L'implementazione predefinita di Android resource shrinker è stata aggiornata nel plug-in Android per Gradle 7.1.0-alpha09. La nuova implementazione supporta la riduzione delle app con funzionalità dinamiche.
Ulteriori riduzioni sperimentali delle dimensioni dell'app
La nuova implementazione di riduzione delle risorse può ridurre ulteriormente le dimensioni dell'app ridotta modificando la tabella delle risorse per rimuovere le risorse di valori non utilizzate e i riferimenti alle risorse di file non utilizzate. Il nuovo strumento di riduzione delle risorse
può eliminare completamente le risorse dei file inutilizzati, riducendo ulteriormente le dimensioni
della tua app. Questo comportamento non è ancora abilitato per impostazione predefinita, ma puoi
attivarlo per provarlo aggiungendo l'opzione sperimentale
android.experimental.enableNewResourceShrinker.preciseShrinking=true
al file gradle.properties
del tuo progetto.
Segnala eventuali problemi riscontrati con il nuovo strumento di riduzione delle risorse o con il
flag sperimentale. Per facilitare la diagnosi dei problemi o come soluzione temporanea,
puoi tornare all'implementazione precedente aggiungendo
android.enableNewResourceShrinker=false
al file
gradle.properties
del progetto.
Il nuovo riduttore sostituisce le risorse basate su file inutilizzate con file minimali leggermente diversi rispetto al riduttore di risorse precedente, ma non è previsto alcun impatto sul runtime.
La vecchia implementazione verrà rimossa nel plug-in Android per Gradle 8.0.0.
Compilare la pubblicazione delle varianti
Il plug-in Android per Gradle 7.1.0 e versioni successive ti consente di configurare le varianti di build da pubblicare in un repository Apache Maven. AGP crea un componente con una o più varianti di build in base al nuovo DSL di pubblicazione, che puoi utilizzare per personalizzare una pubblicazione in un repository Maven. Rispetto alle versioni precedenti, in questo modo si evita anche lavoro inutile, in quanto non verranno creati componenti per impostazione predefinita. Per saperne di più, consulta l'esempio di codice di pubblicazione.
Pubblica JAR Javadoc
AGP 7.1.0 e versioni successive consentono di generare Javadoc da sorgenti Java e Kotlin e pubblicare file JAR Javadoc oltre agli AAR per i progetti di libreria. La documentazione Javadoc viene aggiunta al file POM e ai file
Gradle Module Metadata{:.external}. Attiva questa funzionalità aggiungendo withJavadocJar()
nel blocco
singleVariant
o multipleVariants
.
Per saperne di più, consulta l'esempio di codice delle opzioni di pubblicazione.
Pubblica JAR delle origini
AGP 7.1.0 e versioni successive ti consentono di pubblicare file JAR di origine Java e Kotlin
oltre ai file AAR per i progetti di libreria. Le origini vengono aggiunte ai file
POM e
Gradle Module Metadata{:.external}. Puoi attivare questa
funzionalità aggiungendo withSourcesJar()
nel
blocco singleVariant
o multipleVariants
di pubblicazione. Per saperne di più, consulta l'esempio di codice delle opzioni di pubblicazione.
Modifica semantica del blocco lint
Tutti i metodi di lint che sostituiscono il livello di gravità specificato di un problema (enable
, disable
/ignore
, informational
, warning
, error
, fatal
) ora rispettano l'ordine di configurazione. Ad esempio,
l'impostazione di un problema come fatale in
finalizeDsl()
ora sostituisce la disattivazione nel DSL principale. Per saperne di più, consulta la
lint{}
documentazione di riferimento sui blocchi e
flusso di build e punti di estensione di Android.
Compatibilità di Safe Args per la navigazione
Le API AGP da cui dipende il plug-in Gradle Safe Args per la navigazione sono state rimosse. AGP 7.1 non funziona con le versioni 2.4.0-rc1 o 2.4.0 di Navigation Safe Args, ma funziona con le versioni 2.5.0-alpha01 e 2.4.1. Nel frattempo, come soluzione alternativa, puoi utilizzare AGP 7.1 con una build snapshot di Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. Per utilizzare la build dello snapshot, segui le istruzioni per lo snapshot con l'ID build 8054565.
Inoltre, le versioni 2.4.1 e 2.5.0 di Navigation Safe Args non funzioneranno più con AGP 4.2; per utilizzare queste versioni di Safe Args, devi utilizzare AGP 7.0 e versioni successive.
Disattivare la creazione automatica di componenti
A partire da AGP 8.0, la creazione automatica dei componenti verrà disattivata per impostazione predefinita.
Al momento, AGP 7.1 crea automaticamente un componente per ogni variante di build,
che ha lo stesso nome della variante di build, e un componente all
che contiene tutte le varianti di build. Questa creazione automatica
dei componenti verrà disattivata. Per eseguire la transizione al nuovo comportamento, devi
disattivare manualmente la creazione automatica dei componenti impostando
android.disableAutomaticComponentCreation
su true.
.
Per ulteriori informazioni, vedi
Utilizzare il plug-in Maven Publish.
Compatibilità di Firebase Performance Monitoring
AGP 7.1 non è compatibile con il plug-in Gradle di Firebase Performance Monitoring versione 1.4.0 e precedenti. L'assistente per l'upgrade di AGP non aggiornerà automaticamente
il plug-in alla versione 1.4.1, quindi se utilizzi firebase-perf
e vuoi
eseguire l'upgrade di AGP alla versione 7.1, devi farlo manualmente.
Problemi noti
Questa sezione descrive i problemi noti esistenti nel plug-in Android per Gradle 7.1.0.
Problemi con il test delle unità di un progetto di app che utilizza il plug-in Hilt
Il classpath del test delle unità contiene le classi dell'app non strumentate, il che significa che Hilt non strumenta le classi dell'app per gestire l'iniezione delle dipendenze durante l'esecuzione dei test delle unità.
Questo problema verrà risolto con la release 7.1.1, vedi problema n. 213534628.