Plug-in Android Gradle 3.6.0 (febbraio 2020)
Questa versione del plug-in Android richiede quanto segue:
-
Gradle 5.6.4. Per scoprire di più, consulta la sezione sull'aggiornamento di Gradle.
-
SDK Build Tools 28.0.3 o versioni successive.
Questo aggiornamento secondario supporta la compatibilità con le nuove impostazioni e funzionalità predefinite per la visibilità dei pacchetti in 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 funzionalità.
Visualizza associazione
L'associazione delle visualizzazioni offre sicurezza in fase di compilazione quando fai riferimento alle viste nel
codice. Ora puoi sostituire findViewById()
con il riferimento alla classe di associazione generato automaticamente. Per iniziare a utilizzare l'associazione Visualizza, includi quanto segue nel file build.gradle
di ogni modulo:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Per scoprire di più, leggi la documentazione sull'associazione delle visualizzazioni.
Supporto per il plug-in Maven publish
Il plug-in Android Gradle include il supporto per il plug-in Maven Pubblica Gradle, che consente di pubblicare artefatti delle build in un repository Maven di Apache. Il plug-in Android Gradle crea un componente per ogni artefatto delle varianti di build nella tua app o nel modulo della libreria che puoi utilizzare per personalizzare una pubblicazione in un repository Maven.
Per scoprire di più, consulta la pagina su come utilizzare il plug-in Maven Pubblica.
Nuovo strumento di pacchettizzazione predefinito
Durante la creazione della versione di debug dell'app, il plug-in utilizza un nuovo strumento di pacchetto, chiamato zipflinger, per creare l'APK. Questo nuovo strumento dovrebbe fornire miglioramenti della velocità di build. Se il nuovo strumento di presentazione
non funziona come previsto,
segnala un bug. Puoi ripristinare
il vecchio strumento di pacchettizzazione includendo quanto segue nel
file gradle.properties
:
android.useNewApkCreator=false
Attribuzione nativa build
Ora puoi determinare il tempo necessario a Clang per creare e collegare ciascun file C/C++ nel tuo progetto. Gradle può generare una traccia di Chrome contenente timestamp per questi eventi di compilazione, in modo che tu possa comprendere meglio il tempo necessario per creare il tuo progetto. Per generare questo file di attribuzione della build:
-
Aggiungi il flag
-Pandroid.enableProfileJson=true
durante l'esecuzione di una build Gradle. Ecco alcuni esempi: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 nome del file èprofile-<var>timestamp</var>.json.gz
.
Puoi visualizzare i dati di attribuzione della build nativa nella parte superiore dello spettatore:
Modifiche del comportamento
Quando utilizzi questa versione del plug-in, potresti riscontrare i seguenti cambiamenti di comportamento.
Librerie native pacchettizzate non compresse per impostazione predefinita
Quando crei la tua app, il plug-in ora imposta extractNativeLibs
su "false"
per impostazione predefinita. In altre parole, le librerie native sono allineate di pagina e pacchettizzate
non compresse. Anche se ciò comporta dimensioni di caricamento maggiori, i tuoi utenti beneficiano di quanto segue:
- Dimensioni di installazione delle app ridotte perché la piattaforma può accedere alle librerie native direttamente dall'APK installato, senza creare una copia delle librerie.
- Dimensioni di download ridotte, perché in genere la compressione sul Play Store è migliore se includi librerie native non compresse nell'APK o nell'Android App Bundle.
Se vuoi che il plug-in Android Gradle pacchettizzi librerie native compresse, includi quanto segue nel file manifest dell'app:
<application
android:extractNativeLibs="true"
... >
</application>
Nota: l'attributo del file manifest extractNativeLibs
è stato sostituito dall'opzione DSL useLegacyPackaging
. Per ulteriori informazioni, consulta la nota di rilascio Utilizzare la connessione DSL per pacchettizzare librerie native compresse.
Versione NDK predefinita
Se scarichi più versioni dell'NDK, il plug-in Android per Gradle seleziona ora 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 file build.gradle
del modulo per sostituire il valore predefinito selezionato dal plug-in.
Generazione semplificata di classi R
Il plug-in Android Gradle semplifica il classpath di compilazione generando una sola classe R per ogni modulo della libreria nel tuo progetto e condividendo queste classi R con altre dipendenze del modulo. Questa ottimizzazione dovrebbe portare a build più rapide, ma richiede di tenere presente quanto segue:
- Poiché il compilatore condivide le classi R con dipendenze dei moduli upstream, è importante che ogni modulo del progetto utilizzi un nome di pacchetto univoco.
- La visibilità della classe R di una libreria rispetto ad 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 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 la
configurazione delle dipendenze
implementation
. Per scoprire di più, scopri di più sulle configurazioni delle dipendenze.
Rimuovi le risorse mancanti dalla configurazione predefinita
Per i moduli Library, se includi una risorsa per una lingua che non includi nel set predefinito di risorse, ad esempio se includi hello_world
come risorsa stringa in /values-es/strings.xml
ma non definisci questa risorsa in /values/strings.xml
, il plug-in Android Gradle non include più questa risorsa durante la compilazione del progetto. Questa modifica del comportamento
dovrebbe comportare meno Resource Not Found
eccezioni di runtime
e una migliore velocità delle build.
D8 ora rispetta il criterio di conservazione CLASS per le annotazioni
Quando compila la tua app, D8 ora rispetta l'applicazione di un criterio di conservazione CLASS alle annotazioni, che non sono più disponibili durante il runtime. Questo comportamento si verifica anche quando l'SDK di destinazione dell'app viene impostato al livello API 23, che in precedenza consentiva l'accesso a queste annotazioni durante il runtime durante la compilazione dell'app utilizzando versioni precedenti del plug-in Android Gradle e D8.
Altre modifiche del comportamento
-
aaptOptions.noCompress
non è più sensibile alle maiuscole su tutte le piattaforme (sia per APK che per bundle) e rispetta i percorsi che utilizzano caratteri maiuscoli. -
L'associazione di dati è ora incrementale per impostazione predefinita. Per scoprire di più, consulta il problema n. 110061530.
-
Tutti i test delle unità, inclusi quelli delle unità Roboelettriche, sono ora completamente memorizzabili nella cache. Per scoprire 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 delle unità Robolectric sono ora supportati nei moduli della libreria che utilizzano l'associazione di dati. Per scoprire di più, consulta il problema n. 126775542.
- Ora puoi eseguire
connectedAndroidTest
attività su più moduli mentre è abilitata la modalità di esecuzione parallela di Gradle.
Problemi noti
Questa sezione descrive i problemi noti che esistono nel plug-in Android per Gradle 3.6.0.
Prestazioni lente dell'attività Lint di Android
Il completamento di Android Lint può richiedere molto più tempo in alcuni progetti a causa di una regressione nella sua infrastruttura di analisi, che comporta un calcolo più lento dei tipi dedotti per le lambda in alcuni costrutti di codice.
Il problema viene segnalato come un 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 file manifest, il plug-in Android Gradle genera in genere una classe Manifest.java
che include le tue autorizzazioni personalizzate come costanti delle stringhe. Il plug-in pacchettizza questa classe con la tua app, così puoi fare riferimento a queste autorizzazioni più facilmente in fase di runtime.
La generazione della classe del manifest viene interrotta nel plug-in Android Gradle 3.6.0.
Se crei l'app con questa versione del plug-in, che fa riferimento alla classe manifest, potresti visualizzare un'eccezione ClassNotFoundException
. Per risolvere il problema, esegui una delle seguenti operazioni:
-
Fai riferimento alle autorizzazioni personalizzate indicando il loro 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"; } }