Cos'è Android MultiDex?


111

Ci sono molti post su MultiDex. A volte ho riscontrato errori risolti anche multiDexEnabled truenella defaultConfigsezione del mio build.gradle.

Ma cos'è esattamente questa caratteristica? Quali sono gli scenari per utilizzarlo?

Risposte:


166

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

2
Hai idea di quanto sarebbe grande una base di codice (LOC, o un numero approssimativo di schermate)? Hai intenzione di colpire questo limite su un semplice 5-6 schermi app o è in realtà molto più in basso la linea (es: 10-20 schermi) che si sarebbe probabilmente colpito
Marchy

20
@Marchia: di solito deriva dall'aggiunta di troppe librerie. È difficile per un progetto senza libreria raggiungere questo limite.
CommonsWare

3
Ho una piccola app che utilizza circa 5 librerie di supporto di Google, Fabric.io e 2 o 3 altre librerie di terze parti e devo usare multi-dex.
c.dunlap

1
ci sono degli svantaggi nell'abilitare il multidex? perché non lasciare che sia vero come predefinito?
Rafael Lima

1
@RafaelLima: ci sono problemi di sicurezza con il quasi backport del multidex per dispositivi precedenti ad Android 5.0. IIRC, può anche causare alcuni problemi con la tua app, se stai tentando di utilizzare classi che si trovano in un file DEX non ancora caricato.
CommonsWare

43

È così semplice

Un singolo file .dex può avere 65.536 metodi (riferimenti), quindi se il numero di riferimenti supera 65.536, vai con multidex.

Più spiegazione!

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


7

Cos'è MultiDex su Android?

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!


1

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.

1
Grazie per la risposta. Questa è una domanda dell'anno 2015, da allora sono cambiate tante cose.
Roberto Tellez Ibarra

-2

Ciò che consente anche a Google (e altri) di applicare DRM, diciamo .. widevine, in pezzi di codice in cui causa problemi alla maggior parte dei non sviluppatori ..

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.