Nie można wykonać dex: zdefiniowano wiele plików dex

125

Wiem, że to pytanie zostało tu zadane kilka razy. Ale nie widziałem jeszcze żadnego możliwego rozwiązania. Zanim wykonam projekt „Uruchom jako aplikację na Androida”, jeśli go nie wyczyszczę, pojawi się następujący błąd i muszę ponownie uruchomić Eclipse ... i wyczyścić ponownie.

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define
     Lcom/jstun/core/attribute/MessageAttributeInterface;

com.jstun.core ... jest częścią mojego folderu src, oczywiście nie mogę go usunąć. Nawet jeśli usunę ten pakiet, inny pakiet pojawi się jako błąd, taki jak:

Unable to execute dex: Multiple dex files define
     Landroid/support/v4/app/ActivityCompatHoneycomb;

Widziałem ten błąd od czasu aktualizacji do ADT 15, używam Eclipse Galileo na Ubuntu. Masz jakiś pomysł? Dzięki za każdą odpowiedź!

Tran Ngu Dang
źródło
Próbowałem prawie wszystkiego w tym wątku, ale nie zadziałało. Rozwiązałem problem, usuwając projekt, a następnie tworząc nowy i kopiując, wklejając pliki źródłowe z kopii zapasowej.
linuxjava
Spójrz na moją odpowiedź pod następującym linkiem. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Odpowiedzi:

136

To jest problem ze ścieżką kompilacji.

  • Upewnij się, że folder bin nie jest uwzględniony w ścieżce kompilacji.

  • Kliknij prawym przyciskiem myszy swój projekt -> przejdź do właściwości -> Buduj ścieżkę.

  • Upewnij się, że biblioteka Honeycomb znajduje się w Twoim libs/folderze, a nie w folderze źródłowym.

  • Dołącz biblioteki libs/indywidualnie w ścieżce kompilacji.

    Przy okazji, możesz chcieć przynieść android-support-v4bibliotekę, aby uzyskać obsługę Ice Cream Sandwich zamiast biblioteki obsługi Honeycomb.

frotte
źródło
50
Ten problem wystąpił również, jeśli masz fizycznie wiele wersji bibliotek uwzględnionych w ścieżce kompilacji. Usunięcie nieużywanych bibliotek ze libsścieżki, wyczyszczenie i zapisanie projektu, ponowne uruchomienie Eclipse i ponowna kompilacja działa dla mnie.
Aryo
Wykluczenie folderu bin ze ścieżki kompilacji rozwiązało to za mnie. Dzięki!
alekop
2
Przyczyną problemu było to, że jeden z biblioteki używając nineoldandroid bibliotekę jako słoiku przechowywanych w ./libs dir, natomiast kolejny projekt używał nineoldandroid poprzez odniesienie go
Deepika Lalra
Może się to również zdarzyć, gdy masz coś takiego Foo.javaw paczce i Foo.javasłoiku wlibs/
tricknology
Ten błąd / błąd występuje, gdy folder projektu znajduje się na Dysku Google. Wydaje mi się, że to błąd, gdy kiedykolwiek Dysk się synchronizuje. Przynajmniej dla mnie
ymerdrengene
58

Dzisiaj napotkałem podobny błąd, a powodem było to, że do biblioteki pomocy technicznej odwoływały się dwa projekty biblioteki używane przez mój projekt aplikacji, ale z różnymi wersjami.

Bardziej szczegółowo: Moja aplikacja opiera się na 2 projektach bibliotecznych

  • FaceBookSDK 3.0 -> który odwołuje się do android-support-v4
  • ActionBarSherlock -> który odwołuje się do android-support-v4, ale ze zmodyfikowaną wersją do obsługi map.

Aby rozwiązać problem musiałem uzależnić bibliotekę FaceBookSDK od biblioteki ABS zamiast bezpośrednio od biblioteki wsparcia.

M. Sameer
źródło
Tak, mój problem był podobny. Dwie biblioteki miały bibliotekę httpmime, więc usunąłem jedną i wskazałem na inny projekt.
Matt,
10
Czy ktoś z was może dokładnie wyjaśnić, jak to zrobiliście?
Samih A
3
@samih w przykładzie, o którym wspomniałem, najpierw usunąłem jar android-support-v4 z folderu lib projektu FaceBookSDK i ścieżki kompilacji. Następnie dodałem odniesienie do projektu biblioteki ActionBarSherlock.
M. Sameer,
dla mnie okazuje się, że inny programista dodał nową wersję pliku jar biblioteki bez usuwania starej. Więc były dwa słoiki z tymi samymi klasami. W związku z tym błąd „Wiele plików dex ...” Możesz wykonać polecenie grep -r „OffendingClassName” | grep jar $, aby wyszukać pliki jar zawierające nazwę klasy.
bibstha
Podobnie, ale przypadkowo dodałem android-support-v4.jardo obu ścieżek kompilacji Eclipse i dodałem ją ręcznie do utworzonego libsfolderu. Z powodu zduplikowanych odniesień nie mogłem skompilować (i otrzymałem komunikat o błędzie, który otrzymał OP). Usunąłem libsfolder, który głupio stworzyłem i wszystko działało. Dzięki za podpowiedź.
kurtzbot
47

Cóż, dla mnie usunąłem plik w folderze libs o nazwie android support v4.jar i wszystko się udało. Powodzenia :)

akemalFirdaus
źródło
1
Dla mnie był to plik Android support v4.jar (1) .jar właśnie go usunąłem i wyczyściłem projekt!
ymerdrengene,
33

Miałem ten sam błąd i za każdym razem, gdy go naprawiałem, powracał po ponownym uruchomieniu Eclipse.

Przede wszystkim, jak powiedzieli inni, upewnij się, że nie masz wielu kopii tego samego pliku .jar wokół swoich projektów.

W moim przypadku miałem główny projekt, który wykorzystywał ActionBarSherlock (między innymi projekty biblioteczne). Sztuczka, która zadziałała w moim przypadku, polegała na przejściu ActionBarSherlock --> Properties --> Java Build path --> Order of Exporti cofnięciu wyboru Android Private Libraries. Następnie przechodząc do Project -> Cleani teraz powinieneś być w stanie poprawnie zbudować projekt.

Teraz, z jakiegoś powodu, za każdym razem, gdy ponownie uruchamiam Eclipse, automatycznie włącza to pole wyboru, więc muszę powtórzyć ten proces ponownie.

Mam nadzieję, że pomoże to zagubionej duszy :)

Henrique
źródło
32

Przejdź do Project / properties i Java Built Path i odznacz prywatne biblioteki Androida

Pravin Bhosale
źródło
1
Naprawiłem też mój problem!
Totic
Ale zatrzymanie działania gcm.jar, jak sprawić, by działał bez tego błędu?
Narendra Singh
Wystąpił błąd: wiele dex Lcom / google / android / gms / analytics / internal / Command $ 1. Mam to po uaktualnieniu Google Play do 22.1.1. Usunięcie zaznaczenia bibliotek prywatnych w projekcie Google Play usunęło błąd
eugene
Uratowałeś mi życie! Dzięki ~
Leo Hsieh
15

Dla mnie wystarczy przejść do opcji Project Properties >> Java Build Path >> Order and Export. Odznacz wszystkie biblioteki zewnętrzne, jak na poniższym obrazku. To działa dla mnie. Mam nadzieję, że to pomoże.

Właściwości projektu

Hoa Hoang
źródło
to był dla mnie problem
Piyush-Ask Any Difference
8

Z tym problemem również spotkałem się w swoim projekcie. AVD nie jest w stanie ponownie załadować kontekstów folderów zasobów, lib, res itp. problem: Dex Loader] Nie można wykonać dex: zdefiniowano wiele plików dex Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.

Potem stworzyliśmy nowe projekty i kopiowane MainActivity.java, activity_main.xml, rozciągliwej kontekst. Następnie usuń stary projekt z eksploracji pakietów, zrestartuj Eclipse i AVD. Mój projekt teraz działa prawidłowo .... :) Mam nadzieję, że te kroki pomogą wam trochę ludziom .. !!

satya
źródło
8

Mam ten sam problem, próbowałem:

  1. Element listy
  2. Otwórz ścieżkę budowania projektu,
  3. Wybierz zakładkę „Biblioteki”,
  4. Usuń całą bibliotekę z wyjątkiem biblioteki Androida
  5. Dodanie wszystkich wymaganych plików JAR,
  6. I zrobione!

U mnie to działa, dzięki.

Fedy Venom
źródło
tak, właśnie zrobiłem to samo. usunięto wszystkie pliki jar, dodane z powrotem. w kolejności i eksportuj, niezaznaczone zależności i sprawdzone wszystkie biblioteki dodane właśnie teraz
Maulik Sheth
6

Jeśli ktoś z was napotyka ten problem z wtyczką facebook-connent-plugin do phonegap

spróbuj usunąć pliki w katalogu bin / class / com / facebook / android! -> i odbuduj

Samih A
źródło
To jest właściwa odpowiedź. Wyjaśnienie to ---- Facebook.android jest uwzględniony dwukrotnie. Raz w facebookSDK.jar, który jest zawarty w twoim projekcie i gdy pliki java zostaną bezpośrednio uwzględnione w twoim projekcie. usunięcie go z projektu to czysty sposób na zrobienie tego. Wszystkie inne odpowiedzi są tylko arounds pracy, która nie będzie eksportować definicję czy coś ....
Sandeep Taneja
6

Jak wspominali inni, dzieje się tak, gdy masz wiele kopii tej samej klasy na ścieżce kompilacji lub w innym miejscu konfiguracji.

Dodałem android-support-v4.jar do mojego folderu libs / i w jakiś sposób eclipse dodałem drugą kopię do bin / classes / android-support-v4.jar.

Możesz to sprawdzić za pomocą

grep -r YourOffendingClassName YourApp | słoik grepa

Usunięcie dodatkowej kopii w bin / classes rozwiązało problem - nie wiem, dlaczego Eclipse utworzył tam kopię.

chaqke
źródło
1
Wypróbowałem wszystkie inne wymienione tutaj opcje, ale to była ta, która rozwiązała to dla mnie! :) I tak, Eclipse powinno umrzeć, a Android Studio powinno dostać wersję 1.0 - świat byłby wtedy lepszym miejscem.
Johan Paul,
5

Mam ten błąd z innego powodu. Myliłem się dodając zarówno bibliotekę obsługującą v4, jak i v13. Nie było to dla mnie konieczne, ponieważ moja minSdkVersion to 15.

Naprawiłem to, włączając tylko bibliotekę obsługującą v13. Upewnij się również, że zaznaczyłeś bibliotekę w ścieżce budowania wyeksportowanej biblioteki w eclipse. Przeniosłem go również na górę.

Ryan R.
źródło
To też mnie dopadło. Biblioteka obsługi v13 zawiera bibliotekę obsługi v4, więc dex pokazywał wiele deklaracji klas.
Kyle Falconer
4

Nawet po przejściu wielu odpowiedzi żadne rozwiązanie nie zadziałało.

Usunąłem „Zależności systemu Android” ze ścieżki kompilacji. Dodano ponownie wszystkie pliki jar do ścieżki kompilacji i błąd zniknął. W jakiś sposób zaćmienie zdawało się gromadzić rzeczy.

Jaydeep W.
źródło
3

Zostawiam tę odpowiedź komuś, kto wpada w ten scenariusz tak, jak ja.

Potknąłem się tu i tam, zanim zauważyłem, że omyłkowo przeciągnąłem i upuściłem plik JAR biblioteki wsparcia do mojego folderu src i tam leżał. Ponieważ nie miałem pojęcia, jak to się stało lub kiedy to tam upuściłem, nigdy nie mogłem sobie wyobrazić, że coś jest nie tak.

Otrzymałem ten sam błąd, po jakimś czasie znalazłem problem i usunąłem go. Projekt działa teraz dobrze.

kishu27
źródło
3

Rozwiązaniem dla mnie było po prostu wykonanie następujących czynności:

  1. -> katalog lib w swoim projekcie i usuń dowolne wiele elementów.
  2. Projekt-> Właściwości-> Ścieżka budowania Java i usuń każdą bibliotekę zależności została dodana automatycznie, a nie przez Ciebie! -> Zastosuj
  3. Zrestartuj Eclipse IDE
  4. Teraz Wyczyść projekt.
  5. Uruchom / debuguj na urządzeniu / emuluj projekt ... Powodzenia
GuyN
źródło
problem nadal występuje
Akhil Jain
2

Mój problem na początku był taki:

Nie można wykonać dex: java.nio.BufferOverflowException. Sprawdź dziennik Eclipse pod kątem śledzenia stosu.

1) Klikam prawym przyciskiem myszy na mój projekt -> Narzędzia Android -> Dodaj bibliotekę wsparcia (Uruchom moją aplikację ... Nie działa, więc kontynuuję ...) 2) Ponownie kliknij prawym przyciskiem myszy na mój projekt -> Właściwości -> Android -> Sprawdź Androida 4.1.2 (16) w Project Build Target (Uruchom aplikację ponownie ... i pobierz to:

Nie można wykonać dex: wiele plików dex definiuje Landroid / support / v4 / app / BackStackState;

3) Więc poszedłem do folderu „lib” w moim projekcie i usuwać the „stary” Android.support.library.jar (uruchom aplikację i Krzyż palców i ...)

TO DZIAŁA!

Mam nadzieję, że to komuś pomoże ... Dzięki ludziom!

daros
źródło
2

Miałem ten problem i nie oznacza to, że ta sama biblioteka jest ładowana wiele razy, ale System próbuje załadować klasę o tej samej nazwie i prawdopodobnie tej samej nazwie pakietu jednocześnie, tj.

  • com.pack1.dei Class Geometryzlibrary1.jar

i kolejny

  • com.pack1.dei Class Geometryzlibrary2.jar.

Jak powinieneś podejść? Powinieneś przeanalizować, które metody są używane, metodę library1.jar lub library2.

Istnieją 2 rozwiązania,

  1. Zmień nazwę pakietu, a następnie dalvik interpretuje, że są to odrębne klasy
  2. Lub jeśli chcesz zaryzykować, wyczyść klasę, która nie zawiera metody, z której naprawdę korzystamy.

Mam nadzieję, że to wyjaśniło często zadawane pytanie.

Głęboki koniec
źródło
2

Usunąłem zależności Androida ze ścieżki kompilacji i zadziałało.

Cüneyt
źródło
1

Ten błąd wystąpił, gdy w projekcie mojej aplikacji odwołałem się do projektu biblioteki w moim obszarze roboczym Eclipse (w moim przypadku zestawu SDK Facebooka) i jednocześnie umieściłem pakiet SDK Facebooka jako jar w folderze libs. Usunięcie odwołania do biblioteki, ale pozostawienie pliku jar w folderze libs spowodowało usunięcie błędu.

Gunnar Karlsson
źródło
1

Miałem ten sam problem. Musiałem usunąć .apkplik, a potem zadziałało.

sefodu
źródło
1

Dla mnie usunąłem android-support-v4.jar z folderu lib, a także usunąłem go ze ścieżki kompilacji.

Rach
źródło
Cześć Rach, witaj w Stackoverflow. Twoja odpowiedź została oznaczona jako niskiej jakości ze względu na jej długość i treść. Odpowiadając na pytania, prosimy o podanie dodatkowego opisu sposobu rozwiązania problemu. Pomoże innym i zdobędzie twoją reputację :)
superbohater
1
  • Kliknij prawym przyciskiem myszy projekt i przejdź do build Path>configuration build path
  • Wybierz zakładkę biblioteki i kliknij support-v4 libraryi kliknij usuń
  • Kliknij OK

a potem wyczyść swój projekt i uruchom to zadziała :-)

Iman Marashi
źródło
0

Na wypadek, gdyby ktoś inny uderzył głową w tę sprawę, tak jak ja:

Mój przypadek dotyczył łańcucha projektów bibliotecznych. Po prostu wyczyszczenie projektu we wszystkich bibliotekach naprawiło wszystko

Joe Plante
źródło
0

Znalazłem poniżej rozwiązanie w eclipse ... mam nadzieję, że zadziała u Ciebie :)

Right click on the Project Name

Select Java Build Path, go to the tab Order and Export

Unchecked your .jar library's
Harshal Benake
źródło
0

Ten problem występuje, gdy ta sama biblioteka jest dodawana do projektu wiele razy. Jeśli celowo nie dodałeś biblioteki wiele razy, sprawdź zależności / biblioteki prywatne bibliotek, które dodałeś w swoim projekcie, najprawdopodobniej już zawierały bibliotekę, która powoduje ten konflikt.

Umer Farooq
źródło
0

Walczyłem też, aby stwierdzić, że jest to problem. W moim przypadku stało się to podczas kopiowania apk do e-maila (przeciągnij i upuść) - przez pomyłkę apk został wklejony do folderu src w jednym z pakietów. Po usunięciu apk z folderu źródłowego działało dobrze.

Prabakaran
źródło
0

Miałem ten problem w Intellij i to dlatego, że biblioteka ActionBarSherlock, którą dodałem do mojego projektu, definiowała android-support-v4.jar jako zależność kompilacji, a ten jar był już zawarty w moim projekcie, więc było wiele kopii / wersji DEX w czas kompilacji.

Rozwiązaniem była zmiana zależności modułu ActionBarSherlock, aby ten jar był Runtime zamiast kompilacji, ponieważ mój projekt już go dostarczał.

TimT
źródło
0

Dla mnie problem polegał na tym, że wcześniej dodałem projekt lib (autobahn lib), a później przełączyłem się na plik Jar tej samej biblioteki. Chociaż usunąłem odniesienia do starszego projektu biblioteki, otrzymałem ten błąd. Podążając za wszystkimi odpowiedziami tutaj, sprawdziłem ścieżkę kompilacji itp. Ale nie dodałem tych bibliotek do ręcznej kompilacji ścieżki. Więc nie miałem nic do usunięcia. Wreszcie natrafiłem na ten folder.

bin / dexedLibs

Zauważyłem, że były dwa pliki jar o tej samej nazwie, odpowiadające autobahn Android, który powodował konflikt. Więc usunąłem wszystkie pliki jar w folderze dexedLibs i odbudowałem projekt. To rozwiązało problem.

Ajith Memana
źródło
0

Aby dodać niezliczone inne potencjalne źródła ... Zaktualizowałem wszystkie biblioteki w libfolderze mojego projektu, ale później Eclipse „z pomocą” ponownie zainstalował wszystkie oryginalne biblioteki. Wewnątrz Eclipse nie było już żadnych odniesień do tych bibliotek, ale zewnętrzny program dex-maker po prostu przechwycił wszystkie pliki w libkatalogu i tym samym uzyskał dwie wersje kilku .jarplików bibliotecznych .

git statuszidentyfikowałem nowe pliki i git clean -fpozbyłem się ich dla mnie (chociaż czasami musiałem czekać lub ponownie uruchamiać Eclipse w systemie Windows, ponieważ pliki nadal były otwarte z kopii).

Brian White
źródło
0

ULTRA proste rozwiązanie i najlepsze:

Usuń wszystko w folderze głównego projektu prawym przyciskiem myszy -> Właściwości -> Ścieżka budowania Java z wyjątkiem Androida XY (gdzie XY to wersja w systemie Android). Oczyść i zbuduj. Gotowe!

Upewnij się wcześniej, że masz jeden plik android-support-v4.jar.

Andrés Fg
źródło
0

Jeśli używasz cordova, wypróbuj polecenie cordova clean

Merbin Joe
źródło