DexException: nie można scalić nowego indeksu 65536 z instrukcją inną niż jumbo


84

Z jakiegoś nieznanego powodu moja aplikacja nagle nie chce się skompilować z Android Studio.

Wciąż dostaję

> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /home/martynas/android-sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output
...
...
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 65536 into a non-jumbo instruction!

Chociaż ta sama aplikacja jest pomyślnie budowana z wiersza poleceń. Sprawdziłem liczbę odwołań do metod i jest znacznie poniżej przerażającego 64 tys.

Teraz używam AS 0.8.11.

Odpowiedzi:


57

Spróbuj dodać tę linię do swojego project.properties

dex.force.jumbo = true

Który zwiększa limit dla ciągów znaków w plikach dex. Twój projekt prawdopodobnie się skompiluje.

Uwaga: również w przypadku zestawu jumbo jest to kolejny limit 64 KB tylko dla metod w pojedynczym dex. Jeśli w przyszłości uzyskasz ten limit, będziesz musiał usunąć niektóre zależności.

Aktualizacja - Usługi Google Play 6.5 (12-08-14)

W wersji 6.5 firma Google ostatecznie uwolniła usługi Google Play. Od teraz możliwe będzie selektywne kompilowanie interfejsów API do pliku wykonywalnego.

Przykład:

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

W przypadku wszystkich innych poszczególnych interfejsów API usług Google Play sprawdź tę stronę w witrynie d.android.com.

Aktualizacja (21-04-2015): https://developer.android.com/tools/building/multidex.html


11
Dodawanie do project.propertiesnie zadziałało, więc zaktualizowałem skrypt kompilacji Gradle zgodnie z opisem tutaj: stackoverflow.com/questions/17320088/…
Martynas Jurkus

1
Zrobiłem oba rozwiązania: dodanie właściwości dex.force.jumbo i dexOptions, ale nadal otrzymuję ten sam błąd. Inna opcja?
Juan Saravia,


Dzięki @HareshChhelana. Z jakiegoś powodu zaczęło działać ... ale tak naprawdę nie zrobiłem nic specjalnego. Mam kilku współpracowników, którzy kompilują projekt bez tej opcji, ale teraz działa dla mnie. Dzięki!
Juan Saravia,

1
Zamiast kompilować wszystkie usługi Google Play, compile 'com.google.android.gms:play-services-base:7.3.0'
uznałem

245

Ustaw właściwość jumboMode w build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

Znalazłem również to przydatne: Wyświetlanie liczby metod dex według pakietu .


12
Dzięki! Na mnie też działa. Ale co oznacza to „jumboMode”?
yital9

3
@ yital9 możesz dowiedzieć się więcej o trybie jumbo tutaj: stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

proszę wyjaśnić przyczynę tego bloku
eC Droid

Dodałem ten sam typ kompilacji do debugowania, ponieważ kompilacja wydania działa dobrze, z powodu proguard. Po tej modyfikacji kompilacja debugowania przebiegła pomyślnie. Czy to w porządku?
granat

1
To działa dla mnie. Należy pamiętać, że plik build.gradle, który ma zostać zmieniony, powinien być modułem, który zgłasza com.android.dex.DexException.
Francis Bacon,

54

To działa dla mnie. Dostawałemcom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Jeśli to nie działa, być może osiągnąłeś limit odwołań do metody w dex, co jest innym problemem. Musisz użyć multidex lub proGuard.


To dla mnie praca. Dzięki!!! ale co to jest „jumboMode”? Czy możesz mi wyjaśnić? @Sayooj
DG

13

Jest to błąd w łączeniu, gdy scalane pliki dex mają więcej niż 65536 ciągów. Nowy indeks nie mieści się w instrukcji const-string, a łączenie dex nie obsługuje zmiany instrukcji, jeśli mają one różne rozmiary, więc nie można go rozszerzyć do instrukcji const-string / jumbo. jb-mr1 poprzez dodanie nowej opcji: --force-jumbo. Ten błąd można naprawić, dodając "dex.force.jumbo=true"do project.properties.


1
@DeepakSharma Musisz wyczyścić swój projekt po włączeniu jumboMode
Lilo

-1

Z najnowszym Android Studio i flagą „force jumbo” zaznaczoną w ustawieniach kompilatora Android Studio ten problem znika.


3
Jeśli to możliwe, dodaj trochę szczegółów w swojej odpowiedzi, proszę.
shA.t
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.