Co to jest Android MultiDex?

111

Jest wiele postów na temat MultiDex. Czasami napotkałem błędy rozwiązane, w tym multiDexEnabled truew defaultConfigsekcji moja build.gradle.

Ale czym właściwie jest ta funkcja? Jakie są scenariusze korzystania z niej?

Roberto Tellez Ibarra
źródło

Odpowiedzi:

166

Cytując dokumentację :

Pliki aplikacji na Androida (APK) zawierają wykonywalne pliki kodu bajtowego w postaci plików Dalvik Executable (DEX), które zawierają skompilowany kod używany do uruchamiania aplikacji. Specyfikacja Dalvik Executable ogranicza całkowitą liczbę metod, do których można odwoływać się w pojedynczym pliku DEX do 65 536, w tym metody platformy Android, metody biblioteczne i metody we własnym kodzie. Przekroczenie tego limitu wymaga skonfigurowania procesu kompilacji aplikacji w celu wygenerowania więcej niż jednego pliku DEX, znanego jako konfiguracja wieluidex.

A więc funkcja jest taka: umożliwia kompilację złożonej aplikacji. Scenariusze korzystania z niej dotyczą sytuacji, gdy kompilacja aplikacji nie powiedzie się z powodu osiągnięcia limitu odwołania do metody 64 KB DEX. To pojawia się jako błąd kompilacji, taki jak:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
CommonsWare
źródło
2
Masz pojęcie, jak duża byłaby to baza kodu (LOC lub przybliżona liczba ekranów)? Czy osiągniesz ten limit w prostej aplikacji na 5-6 ekranów, czy jest naprawdę dużo dalej (np .: 10-20 ekranów), że prawdopodobnie go
osiągniesz
20
@Marchy: Zazwyczaj jest to spowodowane dodaniem zbyt wielu bibliotek. Projektowi bez biblioteki trudno jest osiągnąć ten limit.
CommonsWare
3
Mam małą aplikację, która korzysta z około 5 bibliotek pomocy Google, a także Fabric.io i 2 lub 3 innych bibliotek innych firm i muszę używać multi-dex.
c.dunlap
1
czy są jakieś wady włączenia multidex? dlaczego nie pozwolić, aby było to domyślne?
Rafael Lima
1
@RafaelLima: Istnieją problemy z bezpieczeństwem związane z quasi-backportem multidex dla urządzeń starszych niż Android 5.0. IIRC, może również powodować pewne problemy z aplikacją, jeśli próbujesz użyć klas, które znajdują się w jeszcze nie załadowanym pliku DEX.
CommonsWare
43

To takie proste

Pojedynczy plik .dex może mieć 65 536 metod (odwołań), więc jeśli liczba odniesień przekracza 65 536, możesz skorzystać z multidex.

Więcej wyjaśnień!

Aplikacja dla systemu Android jest kompilowana do pliku .dex, który z kolei jest spakowany do pojedynczego pliku .apk.
DVM (Dalvik Virtual Machine) używa plików / plików .dex do wykonywania kodów bajtowych.

Co powoduje, że liczba odwołań przekracza 65 536 limitów?
Metody napisane przez Ciebie + metody Android Framework + metody biblioteki zewnętrznej (np. Volley, Retrofit, Facebook SDK itp.).
Przeczytałem "gdzieś"
App Compat 24.2.1 zawiera 16,5 tys. Metod
Usługi Google Play GCM 9.6.1 zawiera 16,7 tys. Metod
Więc jeśli stworzyłeś prostą aplikację Hello world, która ma App Compat 24.2.1, jesteś już 1/4 sposób na przekroczenie limitu pojedynczych metod dex

Rohit Singh
źródło
7

Co to jest MultiDex w systemie Android?

Dex oznacza Dalvik Executable, czyli to, czego procesor maszyny wirtualnej Google (Dalvik) używa do obsługi aplikacji na Androida. Android został zbudowany z myślą o małych i prostych aplikacjach, a ograniczenia jednego pliku wykonywalnego Dalvik spowodowały, że wiele odwołań do kodu zostało przypisanych 65 536 metod. Z powodu tego problemu i sposobu, w jaki maszyna Dalvik radzi sobie z wykonywaniem kodu, wystąpiły problemy z kompilacją i wywoływaniem, aż do integracji Monkey Patch lub MultiDex . Integracja MultiDex z Android Studio umożliwia programistom Androida kompilację i wykonanie kodu z ponad 65 536 metodami!

Farhana
źródło
1

Według oficjalnej strony programisty Androida.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.
Masum
źródło
1
Dziękuję za odpowiedź. To jest pytanie z roku 2015, od tego czasu wiele się zmieniło.
Roberto Tellez Ibarra
-2

Pozwala również Google (i innym) na stosowanie DRM, powiedzmy ... widevine, w fragmentach kodu, gdzie powoduje to problemy dla większości osób niebędących programistami.

anonia
źródło