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 minore include le seguenti correzioni di bug:
- Problemi relativi ai corsi duplicati segnalati da R8
Per visualizzare un elenco completo delle correzioni di bug incluse in questa release, consulta il post del blog relativo alla patch 3 di Android Studio Bumblebee.
7.1.2 (febbraio 2022)
Questo aggiornamento minore 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 di unità
- La sincronizzazione di Gradle non riesce con il messaggio "Impossibile caricare la classe 'com.android.build.api.extension.AndroidComponentsExtension'."
- Alcuni nuovi blocchi DSL non possono essere utilizzati dal DSL Groovy nel plug-in Android Gradle 7.0.0
- Nuova API di pubblicazione di AGP 7.1: il file JAR javadoc creato non viene firmato
- ClassesDataSourceCache deve utilizzare la versione più recente 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 relativo alla patch 2 di Android Studio Bumblebee.
7.1.1 (febbraio 2022)
Questo aggiornamento minore corrisponde al rilascio della patch 1 di Android Studio Bumblebee.
Per visualizzare un elenco delle correzioni di bug incluse in questa release, consulta il post del blog relativo al 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 compilazione dell'SDK. |
NDK | N/D | 21.4.7075529 | Installa o configura una versione diversa del NDK. |
JDK | 11 | 11 | Per saperne di più, vedi Impostare la versione JDK. |
L'attività di analisi di lint è ora memorizzabile nella cache
AndroidLintAnalysisTask
è ora compatibile con la
cache di compilazione
di Gradle. Se attivi la cache di compilazione impostando
org.gradle.caching=true
nel file gradle.properties
, l'attività di analisi lint riceverà il relativo output dalla cache di compilazione, se possibile.
L'attività di analisi lint è spesso il principale collo di bottiglia quando esegui lint con il plug-in Gradle per Android, quindi l'attivazione della cache di compilazione migliora la velocità di compilazione quando esegui lint in molte situazioni. Dovresti notare un notevole miglioramento del rendimento, ad esempio se hai un progetto multi-modulo e pulisci la directory di compilazione 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 Android Gradle 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 di consumo deve essere
CMake
e nonndk-build
. Il supporto di ndk-build richiederà un futuro aggiornamento dell'NDK. Il modulo pubblicazione può essereCMake
ondk-build
. -
Il modulo di utilizzo deve attivare
prefab
nel filebuild.gradle
.
android {
buildFeatures {
prefab true
}
}
- Il modulo publishing deve attivare
prefabPublishing
nel filebuild.gradle
.
android {
buildFeatures {
prefabPublishing true
}
}
- Il modulo di utilizzo deve fare riferimento al modulo di pubblicazione
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 esserci un unico STL per l'intera applicazione. Ad esempio, sia i moduli di consumo che quelli di pubblicazione possono utilizzare l'STL condiviso C++.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}
Per ulteriori spiegazioni su come configurare i consumer e i produttori di annunci di ricerca adattabili 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 ripulire la directory di compilazione:
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 di primo livello
build.gradle
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 o 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.
Riduttore delle risorse migliorato
Android Studio Bumblebee include uno strumento di riduzione delle risorse migliorato che consente di ridurre le dimensioni dell'app.
Supporto per le app con funzionalità dinamiche
L'implementazione predefinita dello strumento di riduzione delle risorse Android è stata aggiornata nel plug-in Android per Gradle 7.1.0-alpha09. La nuova implementazione supporta le app con funzionalità dinamiche.
Ulteriori riduzioni sperimentali delle dimensioni delle app
La nuova implementazione dello strumento di riduzione delle risorse può ridurre ulteriormente le dimensioni dell'app ridotta modificando la tabella delle risorse per rimuovere le risorse di valore non utilizzate e i riferimenti alle risorse file non utilizzate. Il nuovo riduttore di risorse può eliminare completamente le risorse file inutilizzate, riducendo ulteriormente le dimensioni dell'app. Questo comportamento non è ancora abilitato per impostazione predefinita, ma puoi attivarlo aggiungendo l'opzione sperimentale android.experimental.enableNewResourceShrinker.preciseShrinking=true
al file gradle.properties
del progetto.
Segnala eventuali problemi riscontrati con il nuovo compressore delle risorse o con il
flag sperimentale. Per contribuire a diagnosticare i problemi o come soluzione temporanea,
puoi tornare all'implementazione precedente aggiungendo
android.enableNewResourceShrinker=false
a gradle.properties
del progetto.
Il nuovo compressore sostituisce le risorse basate su file inutilizzate con file minimi leggermente diversi rispetto al compressore di risorse precedente, ma non dovrebbe avere alcun impatto sul tempo di esecuzione.
La vecchia implementazione verrà rimossa nel plug-in Android per Gradle 8.0.0.
Creare la pubblicazione delle varianti
Il plug-in Android per Gradle 7.1.0 e versioni successive ti consente di configurare le varianti di compilazione da pubblicare in un repository Apache Maven. AGP crea un componente con una o più varianti di compilazione 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 un lavoro non necessario, in quanto non verranno creati componenti per impostazione predefinita. Per scoprire di più, consulta il codice di pubblicazione di esempio.
Pubblica il file JAR Javadoc
AGP 7.1.0 e versioni successive ti consentono di generare Javadoc dalle sorgenti Java e Kotlin e di pubblicare file JAR Javadoc oltre agli AAR per i progetti di librerie. Il file Javadoc viene aggiunto ai file POM e Gradle Module Metadata{:.external}. Attiva questa funzionalità aggiungendo withJavadocJar()
nel
singleVariant
o nel blocco di pubblicazione multipleVariants
.
Per scoprire di più, consulta
l'esempio di codice per le opzioni di pubblicazione.
Pubblicare il file JAR delle origini
AGP 7.1.0 e versioni successive ti consentono di pubblicare file JAR di codice sorgente Java e Kotlin oltre agli AAR per i progetti di librerie. Le origini vengono aggiunte ai file POM e Gradle Module Metadata{:.external}. Puoi attivare questa
funzionalità aggiungendo withSourcesJar()
nel
blocco di pubblicazione singleVariant
o multipleVariants
. Per saperne di più, consulta
l'esempio di codice per le 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 ulteriori informazioni, consulta la documentazione di riferimento dei blocchi lint{}
e i punti di estensione e di flusso di compilazione di Android.
Compatibilità di Safe Args con la navigazione
Le API AGP su cui si basa il plug-in Gradle Navigation Safe Args sono state rimosse. AGP 7.1 non funziona con le versioni Navigation Safe Args 2.4.0-rc1 o 2.4.0, 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 compilazione dello snapshot, segui le istruzioni per gli 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 o versioni successive.
Disattivare la creazione automatica dei componenti
A partire da AGP 8.0, la creazione automatica dei componenti verrà disattivata per impostazione predefinita.
Attualmente, 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 passare al nuovo comportamento, devi disabilitare manualmente la creazione automatica dei componenti impostando android.disableAutomaticComponentCreation
su true.
. Per ulteriori informazioni, consulta Utilizzare il plug-in Maven Publish.
Compatibilità con 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 all'upgrade di AGP non aggiorna 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 eseguire questo particolare upgrade manualmente.
Problemi noti
Questa sezione descrive i problemi noti del plug-in Android per Gradle 7.1.0.
Problemi con i test di unità di un progetto di app che utilizza il plug-in Hilt
Il percorso di classe del test unitario contiene le classi di app non instrumentate, il che significa che Hilt non le instrumenta per gestire l'iniezione di dipendenze durante l'esecuzione dei test unitari.
Questo problema verrà risolto con la release 7.1.1. Vedi issue #213534628.