Was ist Android MultiDex?


110

Es gibt viele Beiträge zu MultiDex. Ich habe manchmal Fehler behoben, die behoben wurden, einschließlich multiDexEnabled trueim defaultConfigAbschnitt meines build.gradle.

Aber was genau ist diese Funktion? Was sind die Szenarien für die Verwendung?

Antworten:


165

Zitieren der Dokumentation :

APK-Dateien (Android Application) enthalten ausführbare Bytecode-Dateien in Form von DEX-Dateien (Dalvik Executable), die den kompilierten Code enthalten, der zum Ausführen Ihrer App verwendet wird. Die Dalvik Executable-Spezifikation begrenzt die Gesamtzahl der Methoden, auf die in einer einzelnen DEX-Datei verwiesen werden kann, auf 65.536, einschließlich Android-Framework-Methoden, Bibliotheksmethoden und Methoden in Ihrem eigenen Code. Um dieses Limit zu überschreiten, müssen Sie Ihren App-Erstellungsprozess so konfigurieren, dass mehr als eine DEX-Datei generiert wird, die als Multidex-Konfiguration bezeichnet wird.

Die Funktion lautet also: Sie ermöglicht das Kompilieren Ihrer komplexen App. Die Szenarien für die Verwendung sind, wenn Ihre App aufgrund des Erreichens des Referenzlimits für die 64K DEX-Methode nicht kompiliert werden kann. Dies wird als Buildfehler angezeigt, z. B.:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

2
Irgendeine Idee, wie groß diese Codebasis sein würde (LOC oder grobe Anzahl von Bildschirmen)? Wirst du dieses Limit in einer einfachen App mit
März

20
@Marchy: Normalerweise werden zu viele Bibliotheken hinzugefügt. Für ein Projekt ohne Bibliothek ist es schwierig, diese Grenze zu erreichen.
CommonsWare

3
Ich habe eine kleine App, die ungefähr 5 Google Support-Bibliotheken sowie Fabric.io und 2 oder 3 andere Bibliotheken von Drittanbietern verwendet, und ich muss Multi-Dex verwenden.
c.dunlap

1
Gibt es irgendwelche Nachteile bei der Aktivierung von Multidex? Warum nicht standardmäßig wahr lassen?
Rafael Lima

1
@ RafaelLima: Es gibt Sicherheitsprobleme mit dem Quasi-Backport von Multidex für Geräte vor Android 5.0. IIRC kann auch Probleme mit Ihrer App verursachen, wenn Sie versuchen, Klassen zu verwenden, die sich in einer noch nicht geladenen DEX-Datei befinden.
CommonsWare

43

So einfach ist das

Eine einzelne .dex-Datei kann 65.536 Methoden (Referenzen) enthalten. Wenn die Anzahl der Referenzen 65.536 überschreitet, entscheiden Sie sich für Multidex.

Mehr Erklärung!

Ein Android-Anwendungsprogramm wird in eine .dex-Datei kompiliert, die wiederum in eine einzelne .apk-Datei komprimiert wird.
DVM (Dalvik Virtual Machine) verwendet .dex-Dateien, um Bytecodes auszuführen.

Wodurch überschreitet die Anzahl der Referenzen 65.536 Grenzwerte?
Von Ihnen geschriebene Methoden + Android Framework-Methoden + Methoden von Drittanbieter-Bibliotheken (z. B. Volley, Retrofit, Facebook SDK usw.).
Ich habe "irgendwo" gelesen, dass
App Compat 24.2.1 16.5k-Methoden enthält.
Google Play Services GCM 9.6.1 enthält 16.7k-Methoden.
Wenn Sie also eine einfache Hello World-Anwendung mit App Compat 24.2.1 erstellt haben, sind Sie bereits 1/4 Weg , um die Grenze der Single-Dex-Methoden zu überschreiten


7

Was ist MultiDex in Android?

Dex steht für Dalvik Executable, mit dem der Virtual Machine Processor (Dalvik) von Google Android-Anwendungen verarbeitet. Android wurde mit Blick auf kleine und einfache Apps entwickelt, und die Einschränkungen für eine einzelne Dalvik Executable haben das Dach der Code-Referenzen auf 65.536 Methoden festgelegt. Aufgrund dieses Problems und der Art und Weise, wie der Dalvik-Computer die Codeausführung handhabt, gab es bis zur Integration von Monkey Patch oder MultiDex einige Probleme beim Kompilieren und Aufrufen . Durch die MultiDex-Integration in Android Studio können Android-Entwickler eine Codebasis mit über 65.536 Methoden kompilieren und ausführen!


1

Offizielle Website für Android-Entwickler.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

1
Danke für die Antwort. Dies ist eine Frage aus dem Jahr 2015, seitdem haben sich viele Dinge geändert.
Roberto Tellez Ibarra

-2

Was es auch erlaubt, ist, dass Google (und andere) DRM anwenden, sagen wir .. widevine, in Codeteilen, wo es für die meisten Nicht-Entwickler Probleme verursacht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.