Plug-in Android per Gradle 3.6.0 (febbraio 2020)
Questa versione del plug-in Android richiede quanto segue:
Versione minima | Versione predefinita | Note | |
---|---|---|---|
Gradle | 5.6.4 | 5.6.4 | Per scoprire di più, consulta la sezione Aggiornare Gradle. |
Strumenti di compilazione SDK | 28.0.3 | 28.0.3 | Installa o configura gli strumenti di creazione dell'SDK. |
Questo aggiornamento secondario supporta la compatibilità con nuove impostazioni predefinite e funzionalità per la visibilità dei pacchetti in Android 11.
Per informazioni dettagliate, consulta le note di rilascio della versione 4.0.1.
Nuove funzionalità
Questa versione del plug-in Android per Gradle include le seguenti nuove funzionalità.
Visualizza associazione
Il binding delle visualizzazioni offre sicurezza in fase di compilazione quando fai riferimento alle visualizzazioni nel
tuo codice. Ora puoi sostituire findViewById()
con il
riferimento alla classe di binding generata automaticamente. Per iniziare a utilizzare il binding delle visualizzazioni,
includi quanto segue nel file build.gradle
di ogni modulo:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Per saperne di più, leggi la documentazione sul binding delle visualizzazioni.
Supporto del plug-in Maven Publish
Il plug-in Android per Gradle include il supporto per il plug-in Gradle per la pubblicazione Maven, che consente di pubblicare gli artefatti di build in un repository Apache Maven. Il plug-in Android Gradle crea un componente per ogni artefatto della variante di build nel modulo dell'app o della libreria che puoi utilizzare per personalizzare una pubblicazione in un repository Maven.
Per saperne di più, visita la pagina su come utilizzare il plug-in Maven Publish.
Nuovo strumento di pacchettizzazione predefinito
Quando crei la versione di debug della tua app, il plug-in utilizza un nuovo
strumento di packaging, chiamato zipflinger, per creare l'APK. Questo nuovo
strumento dovrebbe migliorare la velocità di compilazione. Se il nuovo strumento di creazione dei pacchetti
non funziona come previsto,
segnala un bug. Puoi ripristinare
l'utilizzo del vecchio strumento di creazione dei pacchetti includendo quanto segue nel file
gradle.properties
:
android.useNewApkCreator=false
Attribuzione della build nativa
Ora puoi determinare il tempo necessario a Clang per compilare e collegare ogni file C/C++ nel tuo progetto. Gradle può generare una traccia di Chrome che contiene i timestamp di questi eventi del compilatore, in modo da poter comprendere meglio il tempo necessario per compilare il progetto. Per generare questo file di attribuzione della build, segui questi passaggi:
-
Aggiungi il flag
-Pandroid.enableProfileJson=true
quando esegui una build Gradle. Ad esempio:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Apri il browser Chrome e digita
chrome://tracing
nella barra di ricerca. -
Fai clic sul pulsante Carica e vai a
<var>project-root</var>/build/android-profile
per trovare il file. Il file si chiamaprofile-<var>timestamp</var>.json.gz
.
Puoi visualizzare i dati di attribuzione della build nativa nella parte superiore del visualizzatore:
Modifiche al comportamento
Quando utilizzi questa versione del plug-in, potresti riscontrare le seguenti modifiche nel comportamento.
Librerie native compresse per impostazione predefinita
Quando crei l'app, il plug-in ora imposta
extractNativeLibs
su "false"
per
impostazione predefinita. ovvero le librerie native sono allineate alla pagina e compresse. Sebbene ciò comporti dimensioni di caricamento maggiori, i tuoi utenti
beneficiano di quanto segue:
- Dimensioni di installazione dell'app più ridotte perché la piattaforma può accedere alle librerie native direttamente dall'APK installato, senza creare una copia delle librerie.
- Dimensioni di download più ridotte perché la compressione del Play Store è in genere migliore quando includi librerie native non compresse nell'APK o nell'Android App Bundle.
Se vuoi che il plug-in Android Gradle comprima le librerie native, includi quanto segue nel manifest dell'app:
<application
android:extractNativeLibs="true"
... >
</application>
Nota:l'attributo extractNativeLibs
manifest
è stato sostituito dall'opzione useLegacyPackaging
DSL. Per ulteriori informazioni, consulta la nota di rilascio
Utilizzare il linguaggio specifico del dominio per comprimere
le librerie native.
Versione NDK predefinita
Se scarichi più versioni dell'NDK, il plug-in Android Gradle
ora seleziona una versione predefinita da utilizzare per la compilazione dei file di codice sorgente.
In precedenza, il plug-in selezionava l'ultima versione scaricata dell'NDK.
Utilizza la proprietà android.ndkVersion
nel file
build.gradle
del modulo per ignorare il 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 della libreria nel progetto e condividendo queste classi R con altre dipendenze del modulo. Questa ottimizzazione dovrebbe comportare build più veloci, ma richiede di tenere presente quanto segue:
- Poiché il compilatore condivide le classi R con le dipendenze dei moduli upstream, è importante che ogni modulo del progetto utilizzi un nome del pacchetto univoco.
- La visibilità della classe R di una libreria per le altre dipendenze del progetto
è determinata dalla configurazione utilizzata per includere la libreria come
dipendenza. Ad esempio, se la libreria A include la libreria B come dipendenza "api", la libreria A e 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 la
configurazione delle dipendenze
implementation
. Per saperne di più, leggi le configurazioni delle dipendenze.
Rimuovi le risorse mancanti dalla configurazione predefinita
Per i moduli della libreria, se includi una risorsa per una lingua che non è inclusa nel set predefinito di risorse, ad esempio se includi hello_world
come risorsa stringa in /values-es/strings.xml
, ma non definisci la risorsa in /values/strings.xml
, il plug-in Android Gradle non include più la risorsa durante la compilazione del progetto. Questa modifica del comportamento
dovrebbe comportare un minor numero di eccezioni di runtime Resource Not Found
e una maggiore velocità di compilazione.
D8 ora rispetta le norme di conservazione CLASS per le annotazioni
Durante la compilazione dell'app, D8 ora rispetta i casi in cui le annotazioni applicano un criterio di conservazione CLASS e queste annotazioni non sono più disponibili in fase di runtime. Questo comportamento si verifica anche quando l'SDK di destinazione dell'app è impostato sul livello API 23, che in precedenza consentiva l'accesso a queste annotazioni durante l'esecuzione durante la compilazione dell'app utilizzando versioni precedenti del plug-in Android Gradle e D8.
Altre modifiche al comportamento
-
aaptOptions.noCompress
non fa più distinzione tra maiuscole e minuscole su tutte le piattaforme (sia per gli APK che per i bundle) e rispetta i percorsi che utilizzano caratteri maiuscoli. -
Il data binding ora è incrementale per impostazione predefinita. Per saperne di più, consulta il problema n. 110061530.
-
Tutti i test delle unità, inclusi i test delle unità Roboelectric, ora sono completamente memorizzabili nella cache. Per saperne di più, consulta il problema n. 115873047.
Correzioni di bug
Questa versione del plug-in Android per Gradle include le seguenti correzioni di bug:
- I test unitari Robolectric sono ora supportati nei moduli della libreria che utilizzano il data binding. Per saperne di più, consulta il problema n. 126775542.
- Ora puoi eseguire attività
connectedAndroidTest
su più moduli mentre è abilitata la modalità di esecuzione parallela di Gradle.
Problemi noti
Questa sezione descrive i problemi noti esistenti nel plug-in Android per Gradle 3.6.0.
Prestazioni lente dell'attività Android Lint
Android Lint può richiedere molto più tempo per essere completato in alcuni progetti a causa di una regressione nella sua infrastruttura di analisi, con conseguente calcolo più lento dei tipi dedotti per le espressioni lambda in determinate costruzioni di codice.
Il problema viene segnalato come bug in IDEA e verrà risolto nel plug-in Android per Gradle 4.0.
Classe manifest mancante {:#agp-missing-manifest}
Se la tua app definisce autorizzazioni personalizzate nel manifest, il plug-in Gradle per Android
in genere genera una classe Manifest.java
che
include le tue autorizzazioni personalizzate come costanti stringa. Il plug-in include
questa classe nella tua app, in modo che tu possa fare riferimento più facilmente a queste
autorizzazioni in fase di runtime.
La generazione della classe manifest non funziona nel plug-in Android per Gradle 3.6.0.
Se crei la tua app con questa versione del plug-in e fa riferimento
alla classe manifest, potresti visualizzare un'eccezione ClassNotFoundException
. Per risolvere il problema, esegui una delle seguenti operazioni:
-
Fai riferimento alle tue autorizzazioni personalizzate in base al 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"; } }