2012-02-06 12 views
10

Sono nuovo ad Android, sto provando a lanciare il progetto, che è in fase di costruzione e di implementazione. Ma ogni volta che faccio una prova per avviare l'applicazione da Eclipse, ottengo questo errore:ECCEZIONE DI LIVELLO SUPERIORE INASPETTATO: java.lang.IllegalArgumentException: già aggiunto

UNEXPECTED TOP-LEVEL EXCEPTION: 
java.lang.IllegalArgumentException: already added: Lcom/.../model/AvailabilityRequest$DAY_TIME_PREFERENCE; 
[2012-02-06 17:32:11 - main-app] Dx  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
[2012-02-06 17:32:11 - main-app] Dx  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
[2012-02-06 17:32:11 - main-app] Dx  at com.android.dx.command.dexer.Main.processClass(Main.java:486) 
... 
[2012-02-06 17:32:11 - main-app] Dx  at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 
[2012-02-06 17:32:11 - main-app] Dx 1 error; aborting 
[2012-02-06 17:32:11 - main-app] Conversion to Dalvik format failed with error 1 

Ho ucciso quantità enorme di tempo per questa cosa stupida. Ovviamente, questo è un problema noto, ma niente funziona per me.
Quello che ho:

funzionamento del sistema - OS X, il che è importante credo;
IDE - Eclipse 3.7.1
ADT - Versione: 15.0.1.v201111031820-219398
strumento Build - Maven

Quello che ho provato finora:
- Properties-> Java Build Path -> Librerie per rimuovere tutte le librerie tranne Android xyz, quindi Maven-> Aggiorna la configurazione del progetto, anche per pulire il progetto;
- Magia con chiusura e riapertura dell'eclissi;
- Danze con l'eliminazione e la ricreazione del progetto e le librerie per esso (secondo il testo del messaggio di errore, c'è una duplicazione delle fonti, che sono in una delle 2 librerie, usate nel progetto principale).

Dopo una delle varianti sopra (di solito la prima) inizia a funzionare, ma posso spendere 20 minuti per farlo funzionare o diverse ore ..., oggi non riesco a farlo affatto.

Qualsiasi idea sarebbe apprezzata.

+0

Trovato questo: http://code.google.com/p/android/issues/detail?id=20398#c22 Sembra che ci sia qualcosa ad esso correlato. – makaron

+0

Stai usando m2e-android? –

+0

Se è così, potresti voler modificare la tua domanda per renderla più chiara. –

risposta

3

Bene, per quanto ho capito, la cosa principale qui era che stavo usando maven come strumento di costruzione. Potrei costruire e distribuire il progetto senza alcun problema, ma non ho potuto avviarlo dall'ambiente (eclipse).

Se non sbaglio, quando si va a di Eclipse Esegui-> Run Configurazioni e creare un Android Application per lanciare il progetto, che, fondamentalmente, chiedete Eclipse (Android SDK) per costruire il .apk con Ant per te, non con Maven. Eclipse crea il progetto con Ant e spinge il file .apk generato al dispositivo/simulatore. Ma dal momento che tutte le impostazioni del progetto sono in .pom, Ant non può costruire il progetto e fornisce gli errori di questo tipo.

Soluzione:
Iniziare l'applicazione giusta dal dispositivo/simulatore dopo che è stato distribuito, non attraverso Esegui menu. Se si desidera eseguire il debug , utilizzare il debug di DDMS, non quello fornito da eclipse. Nel caso in cui non si sappia dove è DDMS (come me nel mio caso) - in Mac è Finestra-> Apri prospettiva-> Altro ... scegliere DDMS dal menu; puoi metterlo come segnalibro insieme a Debug e Java di eclisse. In DDMS troverai tutti gli strumenti interessanti, incluso il debug.

P.S. Questa è una risposta da un principiante e per i principianti ... Se vedi qualcosa in cui ho torto, per favore, fammi sapere o sentiti libero di modificare la mia risposta.

6

L'ADT genererà un'eccezione come questa se il percorso classe Eclipse contiene più di una classe con lo stesso nome/pacchetto. In questo caso si verificano più di una istanza della classe AvailabilityRequest nelle dipendenze di Maven.

È possibile risolvere questo problema individuando le dipendenze del percorso di classe che contengono gli stessi file di classe al loro interno (premendo Ctrl-Alt-T e digitando in AvailabilityRequest lo si farà).

È quindi possibile aprire il POM nell'editor POM m2e e accedere alla scheda Gerarchia dipendenze. Questo ti permetterà di selezionare la dipendenza estranea, che potrai escludere facendo clic con il tasto destro e selezionando "Escludi artefatto Maven ..." che aggiungerà automaticamente un elemento <exclusions> al tuo POM. Questo rimuoverà il JAR duplicato dal tuo classpath Eclipse e ti permetterà di costruire il tuo progetto.

Inoltre, è necessario prestare attenzione a quali dipendenze si aggiungono al proprio POM.

+0

Provando questo, grazie! – makaron

+1

Ricardo, grazie per il tuo supporto (+1), non ho trovato la soluzione, ma il modo in cui l'ho fatto: mi permette di eseguire il debug dell'applicazione, che era lo scopo di tutto questo. – makaron