2015-11-07 40 views

Odpowiedz

83

Cytowanie the documentation:

Android (APK), pliki wykonywalne pliki zawierają kod bajtowy w postaci Dalvik Executable (DEX) plików, które zawierają skompilowany kod używany do uruchamiania aplikacji. Specyfikacja wykonywalna Dalvik ogranicza całkowitą liczbę metod, do których można się odwołać w jednym pliku DEX, do 65 536, w tym metody ramowe Androida, metody biblioteczne i metody we własnym kodzie. Osiągnięcie tego limitu wymaga skonfigurowania procesu budowania aplikacji w celu wygenerowania więcej niż jednego pliku DEX, znanego jako konfiguracja wieloskładnikowa.

Funkcja: pozwala na kompilację złożonej aplikacji. Scenariusze korzystania z niego to sytuacja, gdy aplikacja nie może się skompilować z powodu przekroczenia limitu referencyjnego metody 64K DEX. Pojawia się jako błąd kompilacji, takich jak:

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

Jakiś pomysł, jak duży byłby to kod (LOC, lub przybliżony # ekranów)?Czy osiągniesz ten limit w prostych aplikacjach na ekranach 5-6, czy naprawdę jest o wiele dalej (np. 10-20 ekranów), które prawdopodobnie trafisz? – Marchy

+13

@Marchy: Zwykle pochodzi z dodawania zbyt wielu bibliotek . Trudno projektowi bez biblioteki osiągnąć ten limit. – CommonsWare

+0

Mam małą aplikację, która korzysta z około 5 bibliotek wsparcia google, a także Fabric.io i 2 lub 3 inne biblioteki stron trzecich i muszę korzystać z wielu elementów. –

10

Jest to tak proste, jak to

Pojedynczy plik .dex może mieć 65,536 metod (referencje), więc jeśli liczba odniesień przekracza 65536, idziesz z wielowątkowy.

Więcej wyjaśnienie!

Aplikacja na Androida jest skompilowana 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 wykonania kodu bajtowego.

Co powoduje, że liczba referencji przekracza 65 536 limit?
Metody napisane przez ciebie + Metody systemu Android + Biblioteka innych osób (np. Volley, Retrofit, Facebook SDK itp.).
Czytałem „gdzieś”
App Compat 24.2.1 zawiera 16.5k metod
Google Play GCM 9.6.1 zawiera 16.7k metod
Więc jeśli stworzyliśmy prostą aplikację Witaj świecie, który App COMPAT 24.2. 1, jesteś już 1/4 sposób przekroczyć pojedyncze metody dex ograniczyć

0

What is MultiDex in Android?

Dex oznacza Dalvik wykonywalnego, który jest co procesor Google'a maszyna wirtualna (Dalvik) wykorzystuje do obsługiwać aplikacje na Androida. Android został zbudowany z myślą o małych i prostych aplikacjach, a ograniczenia na jednym pliku wykonywalnym Dalvik przypięły dach referencji kodu 65 536 metod. Z powodu tego problemu i sposobu, w jaki maszyna Dalvik radzi sobie z wykonywaniem kodu, pojawiały się problemy z kompilacją i wywoływaniem, aż do integracji Monkey Patch lub MultiDex. Integracja MultiDex w Android Studio pozwala programistom Android na kompilację i wykonanie bazy kodowej z ponad 65 536 metodami!