2014-12-03 27 views
6

Czy ktoś może mi powiedzieć, czy wieloskładnikowy jest obsługiwany w systemie Android 2.3?Multidex z systemem Android 2.3 (API 9)

Szukałem, ale nie mogę znaleźć informacji na ten temat. Mój projekt ma taką samą konfigurację jak ta: https://github.com/mustafa01ali/MultiDexTest

Projekt jest budowany bez problemu, ale ostatecznej wersji apk nie można zainstalować na urządzeniach z wersją 2.3 lub niższą.

Na instalacji pojawia się błąd

Failure [INSTALL_FAILED_DEXOPT] 

w Android Studio to pojawia się w LogCat:

E/dalvikvm﹕ LinearAlloc exceeded capacity (5242880), last=1384 
W/installd﹕ DexInv: --- END '/data/app/xxx.apk' --- status=0x000b, process failed 
E/installd﹕ dexopt failed on '/data/dalvik-cache/[email protected]@[email protected]' res = 11 
+1

proszę to Google. Jest to oficjalnie obsługiwane: https://plus.google.com/+IanLake/posts/JW9x4pcB1rj. MultiDex: http://developer.android.com/reference/android/support/multidex/MultiDexApplication.html. –

+0

Dzięki Jared. Czy możesz mi powiedzieć, że kiedy Ian Lake mówi "wszystkie urządzenia z API 4+", on mówi o poziomie api lub wersji Androida? Android 4.0 ma api poziom 14 ... – Zasuk

+1

Ponownie przeczytaj to, co właśnie mnie zapytałeś. API 4+ to API 4 i większy niż 4. Przeczytaj: http://developer.android.com/reference/android/support/multidex/MultiDex.html. –

Odpowiedz

5

Ty uderzania ograniczenie różnej wielkości (LinearAlloc), który zgodnie z tym błędem nie rozwiązuje wielu DEX:

https://code.google.com/p/android/issues/detail?id=78035

Od komentarz # 7 w tym błędem:

Istnieje już możliwość w DX pozwalający wymusić generację mniejszy Dex plików: --set-max-idx-number = Niestety zmieniając domyślne nie jest rozwiązanie, ponieważ limit linearAlloc może być osiągnięty na bardzo różnych poziomach, w zależności od hierarchii klas i innych kryteriów: .

Ponadto w przypadku większości aplikacji przejście do trybu wielościeżkowego pomo e jedynie w obejściu limitu linearalloc dla instalacji. Jednak aplikacja nadal będzie ulegać awarii przy tym samym limicie podczas wykonywania. Tylko przypadek użycia roboczego, w którym znam funkcję wielościeżkową, może być pomocny w przypadku linearalloc , gdy pakiet apk nie zawiera jednej aplikacji, ale odrębne elementy są uruchomione w oddzielnym procesie.

Nie jest jasne, czy jest coś, co można zrobić, aby obejść ten limit, przynajmniej na dłuższą metę; może być konieczne uproszczenie aplikacji. Jest jeszcze jedna kwestia StackOverflow tutaj z niektórych informacji, a niektóre obejścia, które mogą Ci się i działa, przynajmniej na jakiś czas:

How to avoid LinearAlloc Exceeded Capacity error android