Ci sono molti post su MultiDex. A volte ho riscontrato errori risolti anche multiDexEnabled true
nella defaultConfig
sezione del mio build.gradle.
Ma cos'è esattamente questa caratteristica? Quali sono gli scenari per utilizzarlo?
Ci sono molti post su MultiDex. A volte ho riscontrato errori risolti anche multiDexEnabled true
nella defaultConfig
sezione del mio build.gradle.
Ma cos'è esattamente questa caratteristica? Quali sono gli scenari per utilizzarlo?
Risposte:
Citando la documentazione :
I file dell'applicazione Android (APK) contengono file bytecode eseguibili sotto forma di file Dalvik Executable (DEX), che contengono il codice compilato utilizzato per eseguire l'app. La specifica Dalvik Executable limita il numero totale di metodi a cui è possibile fare riferimento all'interno di un singolo file DEX a 65.536, inclusi metodi del framework Android, metodi di libreria e metodi nel proprio codice. Per superare questo limite è necessario configurare il processo di compilazione dell'app per generare più di un file DEX, noto come configurazione multidex.
Quindi, la caratteristica è: consente la compilazione della tua app complessa. Gli scenari per l'utilizzo sono quando la tua app non riesce a compilarsi a causa del raggiungimento del limite di riferimento del metodo DEX di 64K. Questo appare come un errore di compilazione, come ad esempio:
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
Un singolo file .dex può avere 65.536 metodi (riferimenti), quindi se il numero di riferimenti supera 65.536, vai con multidex.
Un programma applicativo Android viene compilato in un file .dex che a sua volta compresso in un singolo file .apk.
DVM (Dalvik Virtual Machine) utilizza file / file .dex per eseguire i bytecode.
Cosa fa sì che il numero di riferimenti superi i 65.536 limiti?
Metodi scritti da te + Metodi Android Framework + Metodi di libreria di terze parti (es. Volley, Retrofit, Facebook SDK ecc.).
Ho letto "da qualche parte"
App Compat 24.2.1 contiene 16.5k metodi
Google Play Services GCM 9.6.1 contiene 16,7k metodi
Quindi se hai creato una semplice applicazione Hello world con App Compat 24.2.1, sei già 1/4 modo per superare il limite dei metodi di dex singolo
Dex sta per Dalvik Executable, che è ciò che il processore della macchina virtuale di Google (Dalvik) utilizza per gestire le applicazioni Android. Android è stato creato pensando alle app piccole e semplici ei vincoli su un singolo eseguibile Dalvik fissavano il tetto dei riferimenti al codice a 65.536 metodi. A causa di questo problema e del modo in cui la macchina Dalvik gestisce l'esecuzione del codice, ci sono stati alcuni problemi di compilazione e invocazione, fino all'integrazione di Monkey Patch o MultiDex . L'integrazione di MultiDex in Android Studio consente agli sviluppatori Android di compilare ed eseguire una base di codice con oltre 65.536 metodi!
Accroding sito ufficiale dello sviluppatore Android.
If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.