Android Gradle Plugin 3.6.0 (febbraio 2020)
Questa versione del plug-in Android richiede i seguenti requisiti:
Versione minima | Versione predefinita | Note | |
---|---|---|---|
Gradle | 5.6.4 | 5.6.4 | Per scoprire di più, consulta la sezione sull'aggiornamento di Gradle. |
Strumenti di creazione SDK | 28.0.3 | 28.0.3 | Installa o configura gli strumenti di creazione dell'SDK. |
Questo aggiornamento minore supporta la compatibilità con le nuove impostazioni predefinite e funzionalità per visibilità del pacchetto su Android 11.
Per informazioni dettagliate, consulta le note di rilascio 4.0.1.
Nuove funzionalità
Questa versione del plug-in Android per Gradle include le seguenti nuove le funzionalità di machine learning.
Visualizza associazione
L'associazione delle viste fornisce la sicurezza in fase di compilazione quando si fa riferimento alle viste in
il tuo codice. Ora puoi sostituire findViewById()
con
un riferimento alla classe di associazione generato automaticamente. Per iniziare a utilizzare Visualizza associazione,
includi quanto segue nel file build.gradle
di ogni modulo:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Per saperne di più, leggi il Visualizza Documentazione di associazione.
Supporto per il plug-in Maven publish
Il plug-in Android per Gradle include il supporto per Maven Pubblica il plug-in Gradle, che ti consente di pubblicare gli artefatti di build in in un repository Apache Maven. Il plug-in Android Gradle crea un componente per ogni artefatto delle varianti della build nell'app o nel modulo della libreria che puoi per personalizzare pubblicazione in un Repository Maven.
Per saperne di più, vai alla pagina su come usa il comando Maven per plug-in.
Nuovo strumento di pacchettizzazione predefinito
Quando crei la versione di debug dell'app, il plug-in utilizza un nuovo
chiamato zipflinger, per creare l'APK. Questo nuovo
dovrebbe migliorare la velocità di creazione. Se il nuovo strumento di pacchettizzazione
non funziona come previsto,
segnala un bug. Puoi ripristinare
con il vecchio strumento di imballaggio includendo quanto segue nella
File gradle.properties
:
android.useNewApkCreator=false
Attribuzione build nativa
Ora puoi determinare quanto tempo impiega Clang per creare e collegare ogni file C/C++ nel tuo progetto. Gradle può restituire una traccia di Chrome che contiene i timestamp per questi eventi del compilatore, così puoi a comprendere il tempo necessario per creare il tuo progetto. Per eseguire l'output di questa build del file di attribuzione, procedi nel seguente modo:
-
Aggiungi il flag
-Pandroid.enableProfileJson=true
quando eseguendo una build Gradle. Ad esempio:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Apri il browser Chrome e digita
chrome://tracing
la barra di ricerca. -
Fai clic sul pulsante Carica e vai
<var>project-root</var>/build/android-profile
per trovare il file. Il file è denominatoprofile-<var>timestamp</var>.json.gz
.
Puoi vedere i dati di attribuzione build nativa nella parte superiore della visualizzatore:
Cambiamenti del comportamento
Quando utilizzi questa versione del plug-in, potresti riscontrare quanto segue cambiamenti nel comportamento.
Librerie native pacchettizzate non compresse da predefinita
Quando crei la tua app, il plug-in ora imposta
Da extractNativeLibs
a "false"
entro
predefinito. Ciò significa che le librerie native sono allineate alla pagina e pacchettizzate
non compresso. Anche se ciò comporta dimensioni di caricamento maggiori, i tuoi utenti
usufruiscono di:
- Le dimensioni di installazione dell'app sono ridotte perché la piattaforma può accedere allo direttamente dall'APK installato, senza creare una copia dei nelle biblioteche.
- Dimensioni di download ridotte perché in genere la compressione sul Play Store è migliori se includi librerie native non compresse nell'APK o Android App Bundle.
Se vuoi che il plug-in Android Gradle venga pacchettizzato librerie native, includi quanto segue nel file manifest dell'app:
<application
android:extractNativeLibs="true"
... >
</application>
Nota: il file manifest extractNativeLibs
è stato sostituito dal useLegacyPackaging
DSL
. Per ulteriori informazioni, consulta la nota di rilascio
Utilizza DSL per pacchettizzare i file
librerie native.
Versione NDK predefinita
Se scarichi più versioni di NDK, il plug-in Android per Gradle
ora seleziona una versione predefinita da utilizzare per compilare i file di codice sorgente.
In precedenza, il plug-in selezionava l'ultima versione scaricata dell'NDK.
Utilizza la proprietà android.ndkVersion
nel
build.gradle
per eseguire l'override del valore predefinito selezionato dal plug-in.
Generazione semplificata della classe R
Il plug-in Android Gradle semplifica il classpath di compilazione generando una sola classe R per ogni modulo libreria nel progetto e condividendo queste classi R con altre dipendenze del modulo. Questa ottimizzazione dovrebbe produrre build più veloci, ma è necessario mantenere tieni presente quanto segue:
- Poiché il compilatore condivide le classi R con il modulo upstream di dipendenze, è importante che ogni modulo del progetto utilizzi un un nome univoco del pacchetto.
- La visibilità della classe R di una libreria rispetto ad altre dipendenze del progetto
è determinato dalla configurazione utilizzata per includere la libreria come
della dipendenza. Ad esempio, se la Libreria A include la Libreria B come "api"
la libreria A e le altre librerie che dipendono dalla Libreria A hanno
accesso alla classe R della Libreria B. Tuttavia, altre librerie potrebbero non avere
accesso alla classe R della Libreria B. Se la Libreria A utilizza il parametro
Configurazione delle dipendenze di
implementation
. Per ulteriori informazioni di più, scopri di più dipendenza configurazioni.
Rimuovi le risorse mancanti da quelle predefinite configurazione
Per i moduli Libreria, se includi una risorsa per un linguaggio
non includere nell'insieme di risorse predefinito, ad esempio, se includi
hello_world
come risorsa stringa in
/values-es/strings.xml
, ma non la definisci in
/values/strings.xml
: il plug-in Android Gradle non è più
include questa risorsa durante la compilazione del progetto. Questo comportamento cambia
dovrebbe comportare meno eccezioni di runtime (Resource Not Found
)
e una maggiore velocità di compilazione.
D8 ora rispetta il criterio di conservazione CLASS per le annotazioni
Durante la compilazione dell'app, D8 ora tiene conto dell'applicazione delle annotazioni a CLASS di conservazione e queste annotazioni non sono più disponibili all'indirizzo runtime. Questo comportamento si verifica anche quando si imposta l'SDK target dell'app su API di livello 23, che in precedenza consentiva l'accesso a queste annotazioni durante durante la compilazione dell'app utilizzando versioni precedenti di Android Gradle e D8.
Altre modifiche del comportamento
-
aaptOptions.noCompress
non è più sensibile alle maiuscole per tutti (per APK e bundle) e rispetta i percorsi che utilizzano in maiuscolo. -
L'associazione dei dati ora è incrementale per impostazione predefinita. Per saperne di più, vedi problema n. 110061530.
-
Tutti i test delle unità, compresi i test delle unità Roboelectric, sono ora completamente memorizzabili nella cache. Per saperne di più, vedi problema n. 115873047.
Correzioni di bug
Questa versione del plug-in Android per Gradle include il seguente bug correzioni:
- I test delle unità robotiche sono ora supportati nei moduli della libreria che utilizzano associazione di dati. Per saperne di più, vedi problema n. 126775542.
- Ora puoi eseguire
connectedAndroidTest
attività su mentre Gradle parallelo di esecuzione automatica sia abilitata.
Problemi noti
In questa sezione vengono descritti i problemi noti presenti nel plug-in Android per Gradle 3.6.0.
Prestazioni lente dell'attività Lint Android
Il completamento di alcuni progetti Android Lint può richiedere molto più tempo a causa di una regressione nella sua infrastruttura di analisi, con conseguente rallentamento del calcolo di tipi dedotti per lambda in alcuni costrutti di codice.
Il problema viene segnalato come un bug di IDEA e verranno corretti nel plug-in Android Gradle 4.0.
Classe manifest mancante {:#agp-missing-manifest}
Se la tua app definisce autorizzazioni personalizzate nel file manifest,
In genere il plug-in Gradle genera una classe Manifest.java
che
include le autorizzazioni personalizzate come costanti stringa. I pacchetti di plug-in
questa classe con la tua app, per poter consultare più facilmente
autorizzazioni in fase di runtime.
La generazione della classe manifest non funziona nel plug-in Android Gradle 3.6.0.
Se crei la tua app con questa versione del plug-in, questa fa riferimento
la classe manifest, potresti vedere un ClassNotFoundException
un'eccezione. Per risolvere il problema, procedi in uno dei seguenti modi:
-
Fai riferimento alle autorizzazioni personalizzate utilizzando il nome completo. Ad esempio:
"com.example.myapp.permission.DEADLY_ACTIVITY"
. -
Definisci le tue costanti come mostrato di seguito:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }