Nie można wykonać dex: wiele plików dex definiuje tablicę Lcom / myapp / R $;

391

Od aktualizacji do ADT14 nie mogę już budować mojego projektu. Przed aktualizacją wszystko dobrze się układało.

Błąd:

[2011-10-23 16:23:29 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
[2011-10-23 16:23:29 - myProj] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;

Podobne problemy zostały zgłoszone i próbowałem tam sugestie, w tym

  • Ponowne uruchomienie Eclipse.
  • Czyszczenie projektu i przebudowa - Wyłącz opcję „Projekt-> Kompiluj automatycznie”, następnie „Wyczyść” i „Buduj” projekt, a następnie spróbuj uruchomić. zresetuj opcję „Buduj automatycznie” na Wł
  • Ponowna instalacja AndroidNarzędzi programisty
  • Ponowna instalacja Eclipse (zaktualizowana do najnowszej wersji 3.7.1)
  • Utworzono nowy projekt importujący z systemu plików
  • Utworzono nowy projekt z subversion.
frotte
źródło
czy pracujesz na
Windowsie lub Macu,
jeśli zaimportowałeś projekt biblioteki, a także zaimportowałeś bibliotekę JAR w folderze lib, musisz usunąć plik jar z folderu lib, a także z [Ścieżka kompilacji -> Konfiguruj ścieżkę kompilacji]. I to się uda.
Mehul
Spójrz na moją odpowiedź na poniższy link. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Odpowiedzi:

462

Miałem ten sam problem, dość dziwny, ponieważ działo się to tylko podczas korzystania z Eclipse (ale z Antem było w porządku). Tak to naprawiłem:

  • Kliknij prawym przyciskiem myszy Project Name
  • Wybierz Build Path->Configure Build Path
  • W Java Build Pathprzejdź do kartyOrder and Export

  • Odznacz swoją .jarbibliotekę

Tylko czasami: w zakładce Order and Export nie miałem tam żadnej biblioteki jar, więc odznaczałem element Prywatne biblioteki Androida. Teraz mój projekt jest uruchomiony.

Marco Bonifazi
źródło
W moim projekcie dołączałem bibliotekę wsparcia z katalogu sdk do mojej ścieżki kompilacji i miałem bibliotekę wsparcia w folderze „libs” do obsługi budowania mrówek. Odznaczam jeden i to naprawiło mój problem.
Chris Feist
20
Kiedyś między ostatnim budowaniem a uruchomieniem w moim projekcie tajemniczo pojawiła się nowa biblioteka: „Prywatne biblioteki Androida” zawierające bibliotekę wsparcia, o której już wspomniałem. Więc pojawił się ten tajemniczy „wiele plików dex definiuje ____”. Sprawdzenie ścieżki kompilacji Java i zobaczenie tego nowego elementu oraz odznaczenie pierwotnie dołączonej biblioteki wsparcia rozwiązało problem.
Tom Pace,
9
Wielkie dzięki. To jest właściwe rozwiązanie. Naprawdę nie wiem, dlaczego zaćmienie ma tyle błędów. Teraz sytuacja wygląda tak, jak tylko 2 godziny mogę kodować i 6 godzin muszę znaleźć rozwiązanie tego rodzaju niepotrzebnych problemów.
roy mathew
44
W zakładce Order and Export nie miałem tam żadnej biblioteki jar, więc odznaczono Android Private Librarieselement. Teraz mój projekt jest uruchomiony.
Junior Mayhé
1
W moim przypadku miałem dublicate z'android-Support-v4.jar'. Kiedy usunięte go, błąd odszedł
ymerdrengene
94

Mój problem został rozwiązany po wyczyszczeniu niektórych katalogów i plików pozostałych po poprzednich wersjach narzędzi. ADT Rev 14 zmienia się, gdzie przechowywane są pliki binarne . Usunąłem cały katalog bin, ponownie uruchomiłem Eclipse, wyczyściłem kompilację i wymusiłem przebudowę. Początkowo wydawało się, że to wystarczy, ale problem powrócił po kolejnym uruchomieniu.

W końcu odkryłem, że mój katalog bin został uwzględniony w ścieżce kompilacji projektu. Wyłączyłem bin ze ścieżki kompilacji i powtórzyłem powyższe kroki. To rozwiązało mój problem.

frotte
źródło
42
Co do cholery Google. Ten problem powraca nawet z R15.
Terry
2
Zredagowałem powyższe rozwiązanie, aby uwzględnić ostateczną rozdzielczość. Rozwiązany teraz na stałe.
Terry,
7
Krótko mówiąc, nikt tak naprawdę nie wie, dlaczego problem się zdarza, co to znaczy i jak go naprawić (nie mam katalogu bin na ścieżce kompilacji Java). Z tych powodów unikałem aktualizacji do R15, pozostając przy R9. Ale nadal mam podobny problem , bez żadnych wskazówek w zasięgu wzroku. Każda wskazówka lub pomoc byłaby bardzo mile widziana.
Bill The Ape
6
@BillTheApe - uzgodnione. Jest to bardziej frustrujące, jest kosztowne.
Tom Redman,
@TRedman W końcu udało mi się rozwiązać problem . Nie rozumiem dlaczego. Nie śmiej się LOL +1.
Bill The Ape,
50

[Rozwiązane dla mnie]

Właściwości projektu Eclipse-> Ścieżka kompilacji Java-> Zamów i eksportuj

Odznacz prywatne biblioteki Androida.

użytkownik802467
źródło
4
Nie pomogło w moim przypadku
redux
1
DZIĘKI
46

Żadne z powyższych nie pomogło. W końcu był to prosty problem.

Miałem projekt, który wykorzystuje FacebookSDK i ViewPagerIndicator jako projekty biblioteczne. Wszystkie zostały zbudowane na Android API 16 i te dwa projekty korzystały z biblioteki wsparcia Androida vX (X nie jest 16!)

Dodałem zewnętrzny plik JAR do obu tych projektów i wskazałem go na \ extras \ android \ v4 ... A także usunąłem słoik v4, który miałem w ich folderach libs.

Wyczyść wszystkie projekty i przebuduj.

Voilla!

Dokładny błąd, który otrzymałem: Nie można uruchomić dex: Wiele plików dex definiuje Landroid / support / v4 / view / PagerAdapter; Konwersja do formatu Dalvik nie powiodła się: Nie można uruchomić dex: Wiele plików dex definiuje Landroid / support / v4 / view / PagerAdapter;

Roy Weinberg
źródło
36

Ten problem się zdarzał, miałem zewnętrzny plik .jar w folderze libs o nazwie gson-2.2.2.jar, ale z jakiegoś powodu były dwa z nich, gson-2.2.2.jar i gson-2.2.2.jar ( 1), po prostu usunąłem tę ostatnią i mój projekt został poprawnie zbudowany.

TomSelleck
źródło
2
Miałem podobny problem, gdy w folderze libs znajdował się stary plik jar i połączyłem go z nowszym plikiem jar w tym samym obszarze roboczym. Gdy ADT znajdzie wiele definicji tego samego symbolu, umieszcza taki błąd. Usunięcie starego pliku jar w folderze libs naprawiło go dla mnie.
phyatt
Zewnętrzny słoik jest jedną z przyczyn problemu i tak też się stało w moim przypadku. Właśnie miałem resztki słoika w moim /libspoprzednim eksperymencie, w wyniku czego powstał Projekt Biblioteczny i wygenerowany z niego plik .jar. Usunięcie tego słoika /libsrozwiązuje problem. +1
ripopenid
31
  1. Zamknij zaćmienie.
  2. Usuń folder bin w folderze projektu.
  3. Rozpocznij zaćmienie i oczyść swój projekt.
  4. Teraz uruchom i problem powinien zniknąć
Mohit marwal
źródło
Odpowiedź Mateusa Viccari rozwiązała mój problem, usunąłem zduplikowane biblioteki
lib
Pracowałem dla mnie. Jeśli manifest filezostanie usunięty przez zaćmienie z binkatalogu, dodaj go ręcznie i ponownie wyczyść projekt.
Mehul Joisar
Pracuje dla mnie. Upewnij się także, że nie masz tego samego pliku .jar w dwóch różnych miejscach (w moim przypadku miałem go zarówno w projekcie bibliotecznym, jak iw projekcie odwołującym się do tego projektu bibliotecznego. Wygląda na to, że Eclipse właśnie z jakiegoś powodu automatycznie go dodał)
Magnus W
Dla mnie właśnie wyczyściłem CAŁĄ przestrzeń roboczą. Samo oczyszczenie projektu nie wystarczyło. Uważam, że mój problem miał związek z przejściem jednego z projektów do „Biblioteki” w trakcie czystej operacji
tricknology
W moim przypadku nie pomogło
redux
26

Jak wspomnieli inni, dzieje się tak, gdy masz wiele kopii tej samej klasy na ścieżce kompilacji - w tym bin / w ścieżce klasy jest jednym ze sposobów zagwarantowania tego problemu.

Dla mnie miało to miejsce, gdy dodałem android-support-v4.jar do mojego folderu libs /, i jakoś zaćmienie dodałem drugą kopię do bin / klas / android-support-v4.jar.

Usunięcie dodatkowej kopii w koszu / klasach rozwiązało problem - nie jestem pewien, dlaczego Eclipse stworzył tam kopię.

Możesz to sprawdzić za pomocą

grep -r YourOffendingClassName YourApp | słoik grep

chaqke
źródło
23

Dla mnie wystarczy kliknąć prawym przyciskiem myszy projekt -> Ścieżka kompilacji -> skonfiguruj ścieżkę kompilacji -> Biblioteki -> usuń zależność

po zadziałaniu.

sonida
źródło
20

Ten błąd może wystąpić, jeśli masz dwa słoiki zawierające te same nazwy klas, np. Miałem dwie biblioteki: jsr311-api-1.1.1.jar i jersey-core-1.17.1.jar, oba zawierające klasę javax.ws .rs.ApplicationPath. Usunąłem plik jsr311-api-1.1.1.jar i działało dobrze.

Mateus Viccari
źródło
1
To dla mnie idealne rozwiązanie. Dodałem dwa razy te same biblioteki. Dzięki.
swiftBoy
19

Ten błąd pojawiał się po dodaniu facebooksdk.jar do projektu, który już miał zależności od Androida-support-v4.jar . Ponieważ facebooksdk.jar zawiera już swój własny system Android-support-v4.jar, wystąpiły konflikty. Usunięcie wcześniejszego Androida-support-v4.jar z projektów Właściwości / Ścieżka kompilacji Java / Biblioteki rozwiązało problem.

użytkownik1293131
źródło
18

Iść do Projektu / properties i Java Build Path i niezaznaczone na Androida prywatnych bibliotek .

Jest to również kolejny przypadek tego rodzaju błędu

Gotowy

Hiren Patel
źródło
15

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

Edycja: zignoruj ​​to. Miałem ten sam słoik w moim folderze zależności i bibliotek lib. Usunąłem ten z folderu lib.

Osha Mahue
źródło
2
Usunięcie zależności Androida ze ścieżki kompilacji zepsuło mój projekt. Na szczęście przywracanie było łatwe, klikając prawym przyciskiem myszy projekt> Narzędzia Android> Napraw właściwości projektu.
azdev
W niektórych przypadkach usunięcie zależności Androida i ich ponowne wygenerowanie rozwiązuje niektóre problemy. Ale tak jak w mojej edycji tak nie jest.
Hadi Tok
9

Prawdopodobnie zainstalowałeś R14 , ten błąd mógł być spowodowany aktualizacją narzędzi platformy, musisz ponownie zainstalować SDK

Reno
źródło
Właśnie całkowicie wysadziłem mój SDK i zainstalowałem go świeżo z pobranego pliku zip, a następnie załadowałem interfejsy API Androida za pomocą Menedżera SDK Androida. Miałem duże nadzieje, ale problem nadal występuje.
Terry
W systemie Windows jest ukryty folder .android, należy go również usunąć.
Reno
ten sam problem istnieje
McLan
9

Dla mnie ten problem istnieje tylko, o ile w mój projekt są zaangażowane projekty bibliotek Androida. Więc kiedy usunę wszystkie biblioteki i zrobię to, co powiedziałeś, mogę ponownie uruchomić moją aplikację. Jeśli w grę wchodzą biblioteki, nawet sztuczka polegająca na usuwaniu bin-a nie zadziała.

Nie rozumiem, dlaczego ten błąd pojawił się dzisiaj, odkąd używam ADT 14 od kilku dni. Ale były też inne błędy, które mnie uszczęśliwiały.

mefju
źródło
Wiele rozwiązań wygląda jak niektóre rzeczy voodoo ... :)
Jasper
8

Usunięcie folderu bin nie wystarczyło, usunąłem również folder gen. Następnie po dwóch odbudowaniach zniknął komunikat o błędzie dex.

Rudolf Polzer
źródło
8

Wybierz projekt w Eksploratorze projektów , kliknij prawym przyciskiem myszy i wybierz Właściwości -> Ścieżka kompilacji Java -> Źródło -> Zaznacz pole Zezwalaj na foldery wyjściowe dla folderów źródłowych

prasantasing
źródło
Nie pomogło mojej sprawie.
redux
8

Zasadniczo miałem do czynienia z tym samym problemem. Usunąłem folder BIN, a następnie usunąłem nieużywane pliki jar dla zamówienia i importu z zaćmienia. Po tym zadziałało

Ahsan Zaheer
źródło
7

Spóźniam się na tę imprezę, ale dodając własne doświadczenia, aby móc je później znaleźć :)

Napotkałem ten problem po aktualizacji Androida SDK i zaćmienia reklam. Żadne ulepszenie nie zostanie ukarane!

Problem był dla mnie związany z projektami bibliotecznymi, moja aplikacja odwołuje się zarówno do standardowych projektów Java, jak i projektów bibliotek Androida. Zauważyłem, że ustawienia ścieżki kompilacji Java obejmowały projekty bibliotek systemu Android foldery src i res na liście źródeł (głosowanie za wszystkimi, którzy wspominali, że bin w źródle jest problemem, src i res również stanowiło problem).

Tak więc rozwiązaniem było:

  1. Usuń wszystkie odwołania do źródłowych i źródłowych bibliotek systemu Android z sekcji Ścieżka kompilacji Java ustawień na liście Źródło i liście Projekt
  2. Upewnij się, że czyste zależności Java są wymienione na liście Projekt i zaznaczone na karcie Zamówienie i eksport, aby klasy były zawarte w apk
  3. Upewnij się, że wszystkie zależności bibliotek Androida są wymienione w sekcji Android właściwości projektu, w sekcji biblioteki poniżej sprawdzonych wersji SDK.

Po drodze udało się to wszystko połączyć z innymi rozwiązaniami! Uff!

Sójka
źródło
Dobrze powiedziane! Doszedłem do identycznych wniosków po wielu pracach. Chciałem tylko dodać, że jeśli którykolwiek z twoich projektów bibliotecznych zawiera inne projekty biblioteczne lub zależności w czystej Javie, wszystkie muszą być dodane w ten sam sposób, w przeciwnym razie wystąpi ten błąd. Jeśli będziesz przestrzegać powyższych zasad dla wszystkich swoich projektów, nie powinieneś mieć żadnych problemów.
strangeluck
1
Jeszcze jedno ... wydaje się, że jeśli nie musisz eksportować prywatnych bibliotek Androida projektu lub projektu bibliotecznego, nie rób tego. Jeśli eksportuje go więcej niż jeden projekt lub projekt biblioteki, pojawi się błąd wielu plików dex.
strangeluck
6

Natknąłem się na to, kiedy uaktualniłem z adt 14 do 15 i aby go uruchomić, po prostu usunąłem folder .eclipse (wraz z moimi ustawieniami) i ponownie zainstalowałem adt 15.

Jake1164
źródło
6

Po przeczytaniu odpowiedzi Terrys na temat usunięcia katalogu bin i Larrys na temat lokalizacji katalogu ANT:

Przeniosłem pliki znajdujące się w katalogu BIN moich projektów do BIN / CLASSES i uruchomiłem je.

Edycja 1 Potem nie powiodło się przy drugim uruchomieniu ... doh

Edytuj 2 Tak zamknięte Eclipse przeniosło pliki z powrotem do oryginalnej lokalizacji i wszystko działa ... um co? Nie udaję, że wiem, dlaczego to zadziałało. Zaktualizuje, jeśli jakieś zmiany.

Edytuj 3 Z moich kopii zapasowych zauważyłem, że rzeczywiście w katalogu BIN i BIN / CLASSES znajdowały się zduplikowane pliki.

Więc odpowiedź brzmi: nie ma plików w obu lokalizacjach. Przynajmniej dla mnie to działało.

HostMyBus
źródło
Spróbuj ograniczyć odpowiedzi do: Pomocnych wniosków, a następnie faktów potwierdzających . Unikaj historii AMAP; Ludzie zwykle to oflagują, myśląc, że „to nie jest odpowiedź”.
Brock Adams,
na zdrowie, doceniam wszelką pomoc w
wyjaśnianiu
6

Zmodyfikuj plik eclipse.ini i ustaw parametr maksymalnej pamięci na

-Xmx1024m

Następnie uruchom ponownie komputer.

To zadziałało dla mnie.

Truncarlos
źródło
1
Nic niezwiązanego, zwiększenie pamięci nie rozwiązuje problemów zależności
Sierisimo
6

znalazłem rozwiązanie, które wierzę?

    [2013-04-28 23:56:09 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/coremedia/iso/AbstractBoxParser$1;

Gdzie jest napisane: „Lcom / coremedia / iso / AbstractBoxParser $ 1”, to akurat jest to lokalizacja biblioteki, którą zaimportowałem, która spowodowała problem. Szukałem com.codemedia.iso.AbstractBoxParser $ 1.class i .AbstractBoxParser.class .... wziął ten słoik, rozpakował go, usunął oba te pliki, a następnie ponownie spakował jako .zip, dodał do biblioteki, wyczyścił i działał! nigdy więcej konfliktu dla mnie! (również brak aktualizacji lub dodatkowych pobrań)

jp093121
źródło
6

Miałem dwie różne wersje plików .jar Cordova w moim folderze libs, usunąłem tę, z której nawet nie korzystałem i od razu zadziałało. Dziwne, ponieważ wcześniej tego nie zauważyłem i działało to wcześniej, a potem nagle przestało działać ...

Dediqated
źródło
5

Aktualizacja ADT R14 zmienia się, gdy klasy idą do katalogu bin / klas (patrz http://tools.android.com/recent/buildchangesinrevision14 ). Jeśli używasz ANT, powinieneś zmienić ścieżkę swoich klas z bin do bin / klas. To zadziałało dla mnie.

Larry Borsato
źródło
Korzystam z Eclipse. Czy wiesz, gdzie zmieniasz ścieżkę klasy w Eclipse?
Terry
5

Rozwiązanie dla mnie:

  1. Utwórz kopię zapasową swojego kodu!
  2. Przejdź do obszaru roboczego projektu (nie projektu) i uruchom następujące polecenia:

    dev1: workspace $ cd ~ / Documents / workspace / .metadata / .plugins / dev1: workspace $ rm -rf org.eclipse.core.resources

  3. Przejdź do katalogu Eclipse i wpisz następujące polecenie:

    dev1: eclipse $ ./eclipse clear

  4. Eclipse uruchomi się z pustym obszarem roboczym - nie martw się, że twoje projekty wciąż tam są. Po prostu stwórz nowy projekt z istniejących zasobów i rzeczy powinny być sos.

Dokładny błąd, który otrzymałem: [2012-02-07 14:15:53 ​​- Dex Loader] Nie można uruchomić dex: Wiele plików dex definiuje Landroid / support / v4 / view / PagerAdapter; [2012-02-07 14:15:53 ​​- ProjectCloud] Konwersja do formatu Dalvik nie powiodła się: Nie można wykonać dex: Wiele plików dex definiuje Landroid / support / v4 / view / PagerAdapter;

Cookster
źródło
5

Mam kilka projektów bibliotek z tą samą nazwą pakietu określoną w AndroidManifest (więc R.java nie generuje duplikatów nazw pól). Musiałem usunąć wszelkie uprawnienia i działania z pliku AndroidManifest.xml dla wszystkich projektów bibliotecznych, aby usunąć błąd, aby plik Manifest.java nie został utworzony wiele razy. Mam nadzieję, że to może komuś pomóc.

Jared Rummler
źródło
4

Po wypróbowaniu wszystkich innych sugestii bez powodzenia, usunąłem całą zawartość katalogu „bin” moich projektów, następnie ponownie uruchomiłem zaćmienie i zadziałało.

JPB
źródło
4

Przekształciłem projekt niebiblioteczny w projekt biblioteczny, ale miał on wcześniej zbudowany plik jar w folderze libs. Usunięcie tego pliku jar spowodowało, że ten błąd zniknął.

PacificSky
źródło
4

Napotkałem ten sam problem, a następnie zobaczyłem podczas wypychania mojej aplikacji kilka plików jar, które zostały załadowane dwa razy, stąd wielokrotny błąd dex. Wystarczy przejść do właściwości projektu -> Java Build Path i spróbować odznaczyć jar, który jest ładowany dwukrotnie.

Navi
źródło
4

[Rozwiązane dla mnie]

usuwając zduplikowany „plik JAR” biblioteki, a następnie usuń plik BuildConfig.java, wyczyść projekt i jego działanie.

AbuQauod
źródło