NoClassDefFoundError - Eclipse e Android


193

Sto riscontrando un problema nel tentativo di eseguire un'app Android che, fino all'aggiunta di una seconda libreria esterna al suo percorso di compilazione, funzionava correttamente. Da quando ho aggiunto il jar scoreninja, ora ottengo un NoClassDefFoundError quando provo a eseguire l'app.

Ecco il messaggio:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Poiché tutti gli script di generazione sono generati dagli strumenti Android (?), Non sono sicuro di cos'altro posso fare se non pulire e ricostruire o riavviare l'eclissi (ho già provato tutti e tre). Qualcuno sa come posso modificare questo?


1
Come hai aggiunto il file jar? Hai aggiunto usando il percorso di compilazione -> Librerie -> Vasetti esterni ??
Teja Kantamneni,

1
Progetto facendo clic con il pulsante destro del mouse> Percorso di costruzione> Aggiungi archivi esterni ... come da istruzioni qui: scoreninja.appspot.com
Tom R

4
Se hai aggiornato ADT di recente, guarda la risposta di John qui sotto (e votala!) Stackoverflow.com/a/9916751/489852
Atul Goyal

1
Se stai riscontrando questo problema, prima di passare direttamente alla risposta di John, la risposta di @Till qui sotto lo sta risolvendo anche per molte persone, me compreso.
Carlos P,

Hai provato multidex?
Ashish Rawat,

Risposte:


234

Ho avuto questo problema dopo l'aggiornamento di ADT.

Stavo memorizzando tutti i miei file JAR in una cartella chiamata "lib" e aggiungendo i vasetti al percorso di compilazione nel normale modo Eclipse. Questo ha funzionato bene fino al mio aggiornamento.

Dopo il mio aggiornamento, stavo ottenendo NoClassDefFoundError per una classe che potevo vedere chiaramente era inclusa nel vaso (controllando le classi ReferencedLibraries).

La soluzione era rimuovere i miei vasetti dal percorso di compilazione e rinominare la mia cartella "lib" in "libs". Questa è una convenzione di formica e sembra essere il modo in cui il nuovo ADT trova e include le librerie in un file .apk. Una volta fatto questo, tutto ha funzionato bene.


1
Molte grazie! Prima dell'aggiornamento ADT di ieri non avevo né una cartella lib né una cartella libs e tutto ha funzionato bene. Dopo l'aggiornamento, tutti i barattoli esterni avevano questo problema. Sono stati risolti grazie alla tua risposta. Devo combinare il tuo con quello di Brian per farlo funzionare.
Hong

Grazie Giovanni! Aggiungerò che dopo aver cambiato la cartella in libs ho dovuto riavviare eclipse per farlo funzionare.
Michaeldcooney,

5
Ho riscontrato lo stesso problema dopo l'aggiornamento di ADT, ma tenevo i miei vasetti in una directory esterna al mio progetto e li includevo come libreria utente nel mio percorso di compilazione. La soluzione è stata quella di rimuovere la libreria utente dal mio percorso di compilazione e includere invece i vasetti usando "Aggiungi vasetti esterni", e quindi farli esportare selezionando le caselle di controllo nella scheda "Ordina ed esporta".
Travis,

1
Mi riferivo a android-support-v13.jar come libreria esterna in C: \ android-sdk-windows \ extras \ android \ compatibile \ v13. Ho spostato quel JAR nella cartella libs del progetto e ho rimosso il riferimento da Java Build Path -> Librerie. Una costruzione pulita e stavo tornando.
Snowwire,

Ciao. ho provato il nostro approccio aggiungendo le librerie jar esterne dentro / libs e ora ricevo questo errore: conversione al formato Dalvik fallita con errore 1
Jonathan

100

Non ho dovuto mettere la libreria jar in risorse o librerie, ma solo selezionare la casella per questo jar in Proprietà -> Percorso build Java -> "Ordine ed esportazione" (era elencato prima, ma non selezionato )


Grazie mille! Avevo avuto a che fare con questo errore da molto tempo e tutto ciò che dovevo fare era controllare la casella maledetta per il vaso nella schermata "Ordina ed esporta". La cosa divertente è che dovevo solo farlo in modo che funzionasse su un emulatore di Tablet Nook. Non si sono verificati problemi su dispositivi o altri emulatori.
Luis,

5
Qualcuno sa perché devi fare entrambe le cose, aggiungere la libreria e selezionare anche la casella di controllo in Ordine ed Esporta? C'è un motivo per cui vorrei aggiungere un JAR esterno ma non includerlo nell'ordine ed esportazione?
Lou Morda,

Ho avuto questo problema dopo aver aggiornato ADT e questo l'ho risolto per me.
cdavidyoung,

5
Mi ha aiutato, ma solo dopo aver fatto Progetto -> Pulito
altumano il

Grazie!! Mi ha salvato. Ho dovuto fare una pulizia e riavviare dopo aver installato Eclipse Juno.
Rynardt,

68

Aggiungendo il jar esterno nel percorso di creazione, è sufficiente aggiungere il jar al pacchetto, ma non sarà disponibile durante il runtime.

Affinché il jar sia disponibile in fase di esecuzione , è necessario:

  • Metti il ​​barattolo sotto la tua assetscartella
  • Includi questa copia del vaso nel tuo percorso di compilazione
  • Vai alla scheda di esportazione nella stessa finestra popup
  • Seleziona la casella contro il barattolo appena aggiunto

ScoreNinjaAdapter è il codice di qualcun altro, ma sarei molto sorpreso se contenesse un tale errore in quanto è di uso comune. L'errore si verifica in un punto nel mio codice.
Tom R,

L'errore si verifica letteralmente qui: sna = new ScoreNinjaAdapter (this, SN_APP_ID, SN_APP_KEY);
Tom R,

Hai bisogno di una importdichiarazione per i file jar esterni? Non li ho mai usati.
Anthony Forloney

Hai provato a rimuovere il file .jar dall'approccio alla assestscartella?
Anthony Forloney,

Si. Alla fine, mi sono stufato di tutto questo, ho appena scaricato il sorgente e copiato i file sorgente nel mio progetto. Non è la soluzione più bella, ma funziona ora. Grazie per tutto il vostro aiuto.
Tom R,

48

L'ho avuto per MapActivity. Build in Eclipse ottiene NoClassDefFound nel debugger.

Ho dimenticato di aggiungere una libreria per manifest, all'interno <Application>...</Application>dell'elemento

<uses-library android:name="com.google.android.maps" />

27

Ho modificato l'ordine dei progetti inclusi (Eclipse / Configura percorso di costruzione / Ordine ed esportazione). Ho spostato i miei due progetti dipendenti in cima all'elenco "Ordina ed esporta". Ha risolto il problema "NoClassDefFoundError".

È strano per me. Non ho sentito parlare dell'importanza dell'ordine delle biblioteche e dei progetti inclusi. Android + Eclipse è divertente :)


Questa è anche la soluzione menzionata dal secondo utilizzo qui nel bugruport: code.google.com/p/android/issues/detail?id=55304
arberg

15

Non sono sicuro se questo sia correlato o se stai ancora cercando una risposta, ma mi sono imbattuto in questa discussione mentre cercavo di ricercare lo stesso errore (ma probabilmente per motivi diversi).

Non sono riuscito a trovare soluzioni online, ma una risposta su un thread simile mi ha fatto pensare e ho capito che probabilmente avevo solo bisogno di ricostruire (o ripulire) il progetto.

In Eclipse, vai a Progetto => Pulisci. Seleziona il tuo progetto ed Eclipse sembrava risolverlo da solo. Per me questo ha risolto il problema.

Spero che questo ti aiuti.


Sì, sembra che ci sia un bug in Eclipse / ADT / dex / qualunque cosa che in pratica manchi le classi nella build. Può anche perdere la Applicationclasse che porta a un errore diverso.
Timmmm,

13

Ho riscontrato lo stesso problema. Il motivo era che la libreria che stavo cercando di usare era stata compilata con un JDK 7 standard.

L'ho ricompilato con le -source 1.6 -target 1.6opzioni e ha funzionato bene.


GRAZIE TUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! Sono stato frustrato da questo problema e tu l'hai risolto! È un po 'ironico che anche l'ultimo SDK Jelly Bean 4.3 (API 18) non riesca ancora a leggere 1,7 JAR / classi. E la cosa peggiore non si lamenta affatto :(
Hendy Irawan,

Avevo lo stesso problema. La cosa peggiore è che ho pensato a questa opzione e poi ho cambiato la mia -source 1.7 con -source 1.5 (per essere sicuri) e il problema non è stato risolto. Ma, dopo aver letto il tuo commento, ho provato di nuovo con 1.6 e poi, ha funzionato come un fascino.
Pedro Náñez,

7

La stessa cosa ha funzionato per me: Proprietà -> Percorso build Java -> "Ordina ed esporta" È interessante notare - perché questo non viene fatto automaticamente? Immagino che manchi qualche impostazione. Anche questo è successo per me dopo l'aggiornamento dell'SDK.


3

Fare clic con il tasto destro sulla cartella del progetto, cercare Proprietà nel percorso di compilazione Java e selezionare i file jar visualizzati. Ha funzionato per me.



2

Ho provato di tutto da questo post (e da alcuni altri post) e non ha funzionato per me, questo è di gran lunga il più terribile aggiornamento ADT che abbia mai visto, e non aggiornerò mai senza un backup ADT funzionante.

Sono riuscito a risolverlo rimuovendo il progetto e quindi aggiungendolo di nuovo utilizzando un backup di origine che avevo.


2

Ho avuto lo stesso errore con ADT22. Risolto il problema controllando "Librerie private Android" in proprietà -> Percorso build Java -> Ordine ed esportazione. Se stai usando progetti di libreria, lo stesso dovrebbe essere fatto anche per loro.


Ha funzionato anche per me. Ho incluso la libreria ma ho dimenticato di selezionarla in "Ordina ed esporta". Grazie!
jmrodrigg,

2

Tutte le risposte esistenti non funzionano per me perché il mio caso è un po 'diverso. Mi ci sono volute alcune ore per farlo funzionare. Sto usando Eclipse.

Il mio progetto Android include un altro normale progetto java 1.6, che richiede un file jar di terze parti. Il trucco è:

  • includi il vaso nel normale progetto Java per la compilazione (solo), non controllarlo nella scheda "Ordina ed esporta"
  • copia anche questo file jar nella cartella "libs" del progetto Android in modo che sia disponibile in fase di esecuzione

Spero che questo aiuti coloro che hanno scenari simili al mio.


1

a volte devi prendere l'intero progetto esterno come libreria e non solo il vaso:

il mio problema è stato risolto aggiungendo l'intero progetto (nel mio caso google-play-services_lib) come libreria e non solo il vaso. i passaggi per raggiungerlo (dalla risposta @style ):

  1. File-> Nuovo-> Altro
  2. Seleziona Progetto Android
  3. Seleziona "Crea progetto dalla fonte esistente"
  4. Fai clic sul pulsante "Sfoglia ..." e vai al progetto desiderato
  5. Fine (Ora progetto barra delle azioni nell'area di lavoro)
  6. Fare clic con il tasto destro del mouse sul progetto -> Proprietà
  7. Nella sezione Android-> Libreria fai clic su Aggiungi
  8. seleziona il progetto aggiunto di recente -> Ok

1

A volte accade a causa del fatto di non includere jar, che hai dipendenza, con il tag "usi-libary" nel tuo AndroidManifest.xml.

Inoltre, assicurati che sia all'interno del tag "application".

Saluti,

Ravi


1

Ho avuto questo problema ed è stato causato dal non "esportare" la libreria. Il problema era solo perché i file .class per alcune classi non sono disponibili durante il confezionamento dell'APK. Tempo di compilazione funzionerà bene senza esporzione

Nel mio caso stavo usando la classe "CusrsorAdapter" e in "JavaBuildPath-> Ordina ed esporta" non ho verificato il supporto V4 jar. Una volta selezionato il problema è andato.

Per essere sicuro di ricevere l'errore noClassDefFound a causa del motivo sopra riportato, controlla il logacat, vedrai un errore di superclasse sconosciuto in fase di esecuzione.



0

Ho provato varie cose e il motivo dell'errore nel mio caso è stato il conflitto tra maps.jar e Google Api in Java Build Path-> Librerie. Quindi, quando ho rimosso maps.jar ha funzionato bene.

Saluti,

Wahib


0

assicurati che il tuo file jar sia nella directory libs del tuo progetto in cui stai utilizzando la versione ADT più recente con la tua eclissi.


0

Ho avuto lo stesso identico problema ... Per risolverlo, ho appena rimosso le mie librerie private Android in "percorso di costruzione" e ho fatto clic su OK ... e quando ho aperto di nuovo il "percorso di costruzione" eclipse le aveva aggiunte di nuovo da sole, e poi ha funzionato per me;) ...


0

ho trascorso due giorni cercando di risolvere questo problema dopo aver aggiornato ADT. finalmente sono stato fortunato ad avere questo post qui:

https://code.google.com/p/android/issues/detail?id=55304

che mi ha portato nella giusta direzione. quando segui la soluzione, ricorda di sostituire la libreria di supporto Android di tutti i tuoi progetti con la stessa versione (rimuovila e reinstallala nei progetti). spero che questo aiuti - buona fortuna


0

Se preferisci sapere a quali file è correlata la soluzione alternativa, ecco cosa ho trovato. Semplice modifica il file .classpath in

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Sostituisci il file .classpath in tutti i progetti di libreria e nel progetto Android principale. Il file .classpath si trova nella cartella principale del progetto eclipse. Di causa non dimenticare di aggiungere le tue voci del percorso di classe, se ne hai (quindi confronta con la versione corrente di .classpath).

Credo che questo sia lo stesso risultato che passare attraverso i menu Eclipse come spiegato precedentemente dall'utente componavt (Eclipse / Configura percorso di costruzione / Ordine ed esportazione).


0

La soluzione qui ha funzionato per me. Si tratta di importare la libreria nella cartella libs, quindi modificare il file build.gradle e quindi pulire con gradlew.


0

Se modifichi il tuo ordine ed esporti nel percorso di creazione del tuo progetto, questo errore non si verificherà. L'altro modo per raggiungerlo è attraverso .classpath nella cartella del progetto.


0

Prova questo:-

Passo 1

Aggiungi tutte le librerie per creare pat in Eclipse (significa rendere tutte le librerie a cui fanno riferimento le librerie)

Passo 2

Elimina il file R.java e crea nuovamente il progetto. Non preoccuparti, R.java verrà ricreato automaticamente.

Freddo :)


0

Come ho capito, il tuo Progetto non mostra errori, perché hai incluso il Jar. Ma il Jar non verrà utilizzato quando il tuo Progetto verrà "esportato" sul dispositivo. Prova questo

Progetto -> Proprietà

Percorso di costruzione Java / Ordine ed esportazione

[✔] Il tuo barattolo


0

Questo succede abbastanza spesso a me.

L'ultima volta che è successo, ricordo che è stato causato dal passaggio di Eclipse ADT (Google Special Edition) ad Android Studio e al ritorno. Fondamentalmente ho provato tutti i metodi che posso trovare su StackOverflow che non ha funzionato per me.

Alla fine, ho fatto funzionare di nuovo l'app (non più NoCalssDeffoundError) passando il mio IDE all'Eclipse originale (Keplero) con ADT.

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.