Impossibile eseguire dex: definire più file dex


125

So che questa domanda è stata posta qui alcune volte prima. Ma non ho ancora visto alcuna soluzione possibile. Prima di creare il progetto "Esegui come applicazione Android", se non lo pulisco, ricevo il seguente errore e devo riavviare Eclipse ... e pulire di nuovo.

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

com.jstun.core ... fa parte della mia cartella src, ovviamente non riesco a rimuoverlo. E anche se rimuovo quel pacchetto, un altro pacchetto verrà visualizzato come errore come:

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

Ho visto questo errore dall'aggiornamento ad ADT 15, sto usando Eclipse Galileo su Ubuntu Ne hai idea? Grazie per qualsiasi risposta!


Ho provato quasi tutto in questo thread ma non ha funzionato. Ho risolto il problema eliminando il progetto e creandone uno nuovo e copiando incollando i file di origine dal backup.
linuxjava,


Guarda la mia risposta al seguente link. stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Risposte:


136

Questo è un problema relativo al percorso di compilazione.

  • Assicurati che la tua cartella bin non sia inclusa nel percorso di compilazione.

  • Fare clic con il tasto destro del mouse sul progetto -> vai a proprietà -> Percorso di costruzione.

  • Assicurarsi che la libreria Honeycomb sia nella libs/cartella e non nella cartella di origine.

  • Includi le librerie libs/singolarmente nel percorso di compilazione.

    A proposito, potresti voler portare la android-support-v4libreria per ottenere il supporto Ice Cream Sandwich invece della libreria di supporto Honeycomb.


50
Questo problema si è verificato anche se sono presenti fisicamente più versioni delle librerie nel percorso di compilazione. Rimuovendo le librerie inutilizzate dal libspercorso, ripulendo e salvando il progetto, riavvia Eclipse e ricompilalo di nuovo funzionerà per me.
Aryo,

L'esclusione della cartella bin dal percorso di compilazione l'ha risolto per me. Grazie!
alekop,

2
La causa principale del problema era che una delle librerie stava usando la libreria nineoldandroid come un vaso archiviato nella directory ./libs, mentre un altro progetto stava usando nineoldandroid riferendosi ad esso
Deepika Lalra

Questo può accadere anche quando hai qualcosa di simile Foo.javain un pacchetto e Foo.javain un barattolo inlibs/
tricknology il

Questo errore / errore si verifica quando la cartella del tuo progetto si trova in Google Drive. Immagino che bug quando mai Drive si sincronizza. Almeno per me
ymerdrengene,

58

Oggi ho riscontrato un errore simile e il motivo era che la libreria di supporto faceva riferimento a due progetti di libreria utilizzati dal mio progetto app ma con versioni diverse.

Più in dettaglio: la mia app dipende da 2 progetti di libreria

  • FaceBookSDK 3.0 -> che fa riferimento a android-support-v4
  • ActionBarSherlock -> che fa riferimento a android-support-v4 ma con una versione modificata per supportare le mappe.

Per risolvere il problema, ho dovuto fare in modo che la libreria FaceBookSDK dipendesse direttamente dalla libreria ABS anziché dalla libreria di supporto.


Sì, il mio problema era simile. Due librerie avevano la libreria httpmime, quindi l'ho rimossa e l'ho fatta puntare sull'altro progetto.
Matt,

10
qualcuno di voi ragazzi può spiegare esattamente come lo avete fatto?
Samih A

3
@samih nell'esempio che ho menzionato, prima ho rimosso il vaso android-support-v4 dalla cartella lib del progetto FaceBookSDK e il percorso di compilazione. Quindi ho aggiunto un riferimento al progetto della libreria ActionBarSherlock.
M.Sameer il

per me risulta che un altro sviluppatore ha aggiunto una nuova versione di un file jar della libreria senza eliminare quella precedente. Quindi c'erano due vasetti con le stesse classi. Quindi l'errore "Più file dex ..." Potresti fare un grep -r 'OffendingClassName' | grep jar $ per cercare i file jar che contengono il nome della classe.
bibstha,

Simile, ma avevo accidentalmente aggiunto android-support-v4.jarad entrambi il mio percorso di compilazione Eclipse e l' libsho aggiunto manualmente alla cartella che ho creato. A causa dei riferimenti duplicati, non ho potuto compilare (e ho ricevuto il messaggio di errore ricevuto dall'OP). Ho cancellato la libscartella che ho creato stupidamente e tutto ha funzionato. Grazie per il suggerimento.
Kurtzbot,

47

Bene, ho eliminato il file nella cartella libs chiamata android support v4.jar e tutto ha funzionato. In bocca al lupo :)


1
Per me era un file android support v4.jar (1) .jar L' ho appena rimosso e pulito il progetto!
ymerdrengene,

33

Ho avuto lo stesso errore e ogni volta che l'ho risolto, sarebbe tornato dopo aver riavviato Eclipse.

Prima di tutto, come hanno detto altre persone, assicurati di non avere più copie dello stesso file .jar attorno ai tuoi progetti.

Nel mio caso, avevo un progetto principale che utilizzava ActionBarSherlock (tra gli altri progetti di biblioteca). Il trucco che ha funzionato per me stava andando ActionBarSherlock --> Properties --> Java Build path --> Order of Exporte deselezionando Android Private Libraries. Poi vai Project -> Cleane ora dovresti essere in grado di costruire correttamente il progetto.

Ora, per qualche motivo, ogni volta che riavvio Eclipse, abilita automaticamente quella casella di controllo, quindi devo ripetere nuovamente questo processo.

Spero che questo aiuti qualche anima persa là fuori :)


32

Vai su Progetto / proprietà e Percorso costruito Java e deselezionato le Librerie private Android


1
Risolto anche il mio problema!
Totic

Ma sta smettendo di funzionare gcm.jar, come farlo funzionare senza questo errore?
Narendra Singh,

Ho avuto un errore: più dex Lcom / google / android / gms / analytics / internal / Command $ 1. Ho ottenuto questo dopo aver aggiornato Google Play alla 22.1.1. La deselezione delle librerie private all'interno del progetto Google Play ha rimosso l'errore
eugene,

Mi hai salvato la vita! Thx ~
Leo Hsieh

15

Per me, basta andare su Proprietà progetto >> Percorso build Java >> Ordine ed esportazione. Deseleziona tutta la libreria esterna, come l'immagine qui sotto. Funziona per me. Spero che questo aiuto.

Proprietà del progetto


questo è stato un problema per me
Piyush-Ask Any Difference,

8

Ho anche affrontato questo problema nel mio progetto. AVD non è in grado di ricaricare contesti di risorse, lib, res ed ecc. problema: Caricatore Dex] Impossibile eseguire Dex: definire più file Dex Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.

Poi, ho creato nuovi progetti e copiato MainActivity.java, activity_main.xml, contesto drawable. Quindi elimina il vecchio progetto dal pacchetto esplora, riavvia Eclipse e AVD. Il mio progetto ora funziona correttamente .... :) Spero che questo passaggio ti aiuti un po 'gente .. !!


8

Ho lo stesso problema, quello che ho provato è:

  1. Voce di elenco
  2. Apri percorso build progetto,
  3. Seleziona la scheda "Librerie",
  4. Rimuovi tutta la libreria tranne la libreria Android
  5. Aggiunta di tutti i file JAR richiesti,
  6. E fatto!

Funziona per me, grazie.


si, ho fatto lo stesso. rimosso tutti i file jar, aggiunti di nuovo. in ordine ed esportazione, dipendenze non controllate e controllato tutte le librerie aggiunte proprio ora
Maulik Sheth,

6

Se alcuni di voi affrontano questo problema con Facebook-Connent-Plugin per phonegap

prova a rimuovere i file nella directory bin / class / com / facebook / android! -> e ricostruire


Questa è la risposta esatta. La spiegazione è ---- Facebook.android è incluso due volte. Una volta in facebookSDK.jar che è incluso nel tuo progetto e una volta che i file Java sono direttamente inclusi nel tuo progetto. rimuoverlo dal tuo progetto è il modo pulito per farlo. tutte le altre risposte sono solo soluzioni che non esporteranno la definizione o qualcosa del genere ...
Sandeep Taneja,

6

Come altri hanno già detto, questo si verifica quando si hanno più copie della stessa classe nel percorso di compilazione o altrove nella configurazione.

Avevo aggiunto android-support-v4.jar alla mia cartella libs /, e in qualche modo eclipse ha aggiunto una seconda copia a bin / classes / android-support-v4.jar.

Puoi provare per questo con

grep -r YourOffendingClassName YourApp | vaso grep

L'eliminazione della copia aggiuntiva in bin / classi ha risolto il problema - incerto sul perché Eclipse ne abbia fatto una copia.


1
Ho provato tutte le altre opzioni elencate qui, ma questa è stata quella che l'ha risolto per me! :) E sì, Eclipse dovrebbe morire e Android Studio dovrebbe ottenere la sua versione 1.0 - il mondo sarebbe quindi un posto migliore.
Johan Paul,

5

Ho ricevuto questo errore per un altro motivo. Ho sbagliato ad aggiungere sia la libreria di supporto v4 AND v13. Questo non è stato necessario per me poiché la mia minSdkVersion è 15.

Ho risolto includendo solo la libreria di supporto v13. Inoltre, assicurati di selezionare la libreria nel percorso di compilazione della libreria esportata in eclipse. L'ho anche spostato in alto.


Questo è ciò che mi ha conquistato. La libreria di supporto v13 include la libreria di supporto v4, quindi dex stava mostrando le dichiarazioni di più classi.
Kyle Falconer,

4

Anche dopo aver esaminato più risposte, nessuna soluzione ha funzionato per me.

Ho eliminato "Dipendenze Android" dal percorso di creazione. Aggiunti di nuovo tutti i file jar al percorso di compilazione e l'errore era sparito. In qualche modo l'eclissi sembrava mettere in cache le cose.


3

Lascio questa risposta a qualcuno che arriva in questo scenario come ho fatto io.

Mi sono imbattuto qua e là prima di notare che per errore ho trascinato e lasciato cadere il file JAR della libreria di supporto nella mia cartella src e si trovava lì. Dal momento che non avevo idea di come fosse successo o quando l'ho lasciato cadere lì, non avrei mai immaginato che qualcosa non andasse lì.

Stavo ottenendo lo stesso errore, ho riscontrato il problema dopo qualche tempo e l'ho rimosso. Il progetto ora funziona bene.


3

La soluzione per me era solo fare le seguenti cose:

  1. -> directory lib nel progetto ed elimina tutti gli elementi multipli.
  2. Progetto-> Proprietà-> Percorso build Java ed elimina qualsiasi libreria dipendenze è stata aggiunta automaticamente e non da te! -> Applica
  3. Riavvia IDE Eclipse
  4. Ora pulisci il progetto.
  5. Esegui / Debug su dispositivo / Emulatore del progetto ... Buona fortuna

il problema persiste ancora
Akhil Jain,

2

Il mio problema all'inizio era:

Impossibile eseguire dex: java.nio.BufferOverflowException. Controllare il registro Eclipse per traccia stack.

1) Faccio clic con il tasto destro sul mio progetto -> Strumenti Android -> Aggiungi libreria di supporto (Esegui la mia app ... Non ha funzionato, quindi continuo così ...) 2) Fai nuovamente clic con il tasto destro sul mio progetto -> Proprietà -> Android -> Controlla Android 4.1.2 (16) su Project Build Target (Esegui di nuovo l'app ... e ottieni questo:

Impossibile eseguire dex: più file dex definiscono Landroid / support / v4 / app / BackStackState;

3) Quindi sono andato nella cartella "lib" sul mio progetto ed ho eliminato il "vecchio" Android.support.library.jar (esegui l'app, incrocia le dita e ...)

FUNZIONA!

Spero che aiuti qualcuno ... Grazie gente!


2

Ho avuto questo problema e ciò non significa che la stessa libreria sia stata caricata molte volte ma System sta provando a caricare una classe con lo stesso nome e possibilmente lo stesso nome del pacchetto contemporaneamente, cioè

  • com.pack1.dee Class Geometrydilibrary1.jar

e un altro

  • com.pack1.dee Class Geometrydilibrary2.jar.

Come dovresti avvicinarti? È necessario analizzare quali metodi vengono utilizzati, un metodo di library1.jar o library2.

Ci sono 2 soluzioni,

  1. Rinominare un nomepacchetto e quindi dalvik interpreta, che sono classi distinte
  2. O se vuoi rischiare, elimina la classe, che non contiene il metodo, che usiamo davvero.

Spero che ciò abbia chiarito questa domanda spesso posta.


2

Ho rimosso le dipendenze Android dal percorso di creazione e ha funzionato.


1

Questo errore mi è successo quando nel progetto della mia app ho fatto riferimento a un progetto Library nel mio spazio di lavoro Eclipse (nel mio caso l'SDK di Facebook) e allo stesso tempo ho incluso l'SDK di Facebook come jar nella cartella libs. Rimuovendo il riferimento alla libreria ma mantenendo il vaso nella cartella libs è stato rimosso l'errore.


1

Ho avuto lo stesso problema. Ho dovuto eliminare il .apkfile e poi ha funzionato.


1

Per me ho eliminato android-support-v4.jar dalla cartella lib e rimosso anche dal percorso di compilazione.


Ciao Rach, benvenuta su StackOverflow. La tua risposta è stata contrassegnata come di bassa qualità a causa della sua lunghezza e contenuto. Quando si risponde alle domande, si prega di fornire una descrizione aggiuntiva su come risolvere il problema. Aiuterà gli altri e ti guadagnerà la reputazione :)
supereroe

1
  • Fare clic con il tasto destro sul progetto e andare a build Path>configuration build path
  • Seleziona la scheda della libreria e fai clic su support-v4 librarye fai clic su Rimuovi
  • Clicca su OK

e quindi pulire il progetto ed eseguirlo funzionerà :-)


0

Nel caso in cui qualcun altro sbatte la testa su questo problema come ho appena fatto:

Il mio caso riguardava una catena di progetti di biblioteche. Semplicemente facendo un progetto pulito su tutte le librerie risolto tutto


0

Ho trovato la soluzione di seguito in eclissi ... spero che funzioni per te :)

Right click on the Project Name

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

Unchecked your .jar library's

0

Questo problema si verifica quando una stessa libreria viene aggiunta più volte al progetto. Se non hai aggiunto la libreria più volte intenzionalmente, controlla le librerie di dipendenza / private delle librerie che hai aggiunto al tuo progetto, molto probabilmente hanno già incluso una libreria che sta causando questo conflitto.


0

Stavo anche lottando per scoprire che questo è un problema. Nel mio caso, ciò che è accaduto è stato durante la copia dell'apk in e-mail (trascinamento della selezione) - per errore l'apk è stato incollato nella cartella src in uno dei pacchetti. Dopo aver rimosso l'apk dalla cartella di origine ha funzionato bene.


0

Ho avuto questo problema in Intellij ed è stato perché la libreria ActionBarSherlock che ho aggiunto al mio progetto ha definito android-support-v4.jar come dipendenza di compilazione e questo jar era già incluso nel mio progetto, quindi c'erano più copie / versioni di DEX su tempo di compilazione.

La soluzione era cambiare la dipendenza del modulo ActionBarSherlock affinché questo jar fosse Runtime invece che compilare, poiché il mio progetto lo stava già fornendo.


0

Per me il problema era che, prima avevo aggiunto un progetto lib (autobahn lib) e in seguito avevo cambiato il file Jar della stessa libreria. Sebbene avessi rimosso i riferimenti al vecchio progetto di libreria, stavo ottenendo questo errore. Seguendo tutte le risposte qui ho controllato il percorso di compilazione ecc. Ma non ho aggiunto queste librerie per creare il percorso manualmente. Quindi non avevo nulla da rimuovere. Finalmente ho trovato questa cartella.

bin / dexedLibs

Ho notato che c'erano due file jar con lo stesso nome corrispondenti all'autostrada Android che causava il conflitto. Quindi ho cancellato tutti i file jar nella cartella dexedLibs e ricostruito il progetto. Ciò ha risolto il problema.


0

Per aggiungere la miriade di altre potenziali fonti ... Avevo aggiornato tutte le librerie nella libcartella del mio progetto ma poi Eclipse ha "utile" reinstallato tutte le librerie originali. In Eclipse non c'erano più riferimenti a queste librerie, ma il programma di dex-maker esterno ha appena preso tutti i file nella libdirectory e quindi ha ottenuto due versioni di diversi .jarfile di libreria .

git statusidentificato i nuovi file e git clean -fme ne sono liberato (anche se a volte dovevo aspettare o riavviare Eclipse su Windows perché i file erano ancora aperti dalla copia).


0

Soluzione ULTRA semplice e raffinata:

Rimuovi tutto in Cartella principale del progetto facendo clic con il pulsante destro del mouse -> Proprietà -> Percorso build Java tranne Android XY (dove XY è la versione in Android). Pulisci e costruisci. Fatto!

Assicurati prima di tutto per avere un singolo android-support-v4.jar.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.