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.

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.


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.


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.


4
Nie pomogło w moim przypadku
redux

1

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;


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.


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ąć

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


23

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

po zadziałaniu.


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.


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.


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


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.


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


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.


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.


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


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


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!


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.


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.


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.


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ń)


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ć ...



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;


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.


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.


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ął.


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.


4

[Rozwiązane dla mnie]

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

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.