2012-03-22 8 views
43

Oggi ho aggiornato i miei strumenti ADT e SDK a v17 ei miei progetti utilizzando La libreria di gson jar di Google ha iniziato a generare NoClassDefFoundError. Ecco l'output logcat:Gson NoClassDefFoundError dopo l'aggiornamento degli strumenti ADT e SDK a v17

> 03-22 12:30:58.941: E/AndroidRuntime(21672): FATAL EXCEPTION: main 
> 03-22 12:30:58.941: E/AndroidRuntime(21672): 
> java.lang.NoClassDefFoundError: com.google.gson.Gson 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.conn.XRequestHandler.connect(XRequestHandler.java:35) 
> 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.conn.XRequestHandler.makeRequest(XRequestHandler.java: 
> 29) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.bavul.XBaseWithConnectionActivity.makeRequest(XBaseWithConnectionActivity.java: 
> 46) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.ui.login.SplashScreenActivity.onCreate(SplashScreenActivity.java: 
> 36) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.Activity.performCreate(Activity.java:4465) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 
> 1049) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 
> 1919) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 
> 1980) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread.access$600(ActivityThread.java:122) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
> 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.os.Handler.dispatchMessage(Handler.java:99) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> android.os.Looper.loop(Looper.java:137) 03-22 12:30:58.941: 
> E/AndroidRuntime(21672): at 
> android.app.ActivityThread.main(ActivityThread.java:4340) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> java.lang.reflect.Method.invokeNative(Native Method) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> java.lang.reflect.Method.invoke(Method.java:511) 03-22 12:30:58.941: 
> E/AndroidRuntime(21672): at com.android.internal.os.ZygoteInit 
> $MethodAndArgsCaller.run(ZygoteInit.java:784) 03-22 12:30:58.941: 
> E/AndroidRuntime(21672): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> dalvik.system.NativeStart.main(Native Method) 

tutte le idee?

+0

Hai provato a pulire il progetto da eclissi? – DNRN

risposta

77

Ho affrontato un problema simile oggi.

questa fissa per me:

  • Rimuovere tutti i progetti Biblioteca Android e vasetti esterni dal percorso di generazione.
  • Creare una cartella denominata "libs" nel progetto.
  • Inserire tutti i file .jars esterni in quella cartella, l'ADT deve ora collocarli in "Dipendenze Android".
  • Reimportare tutti i precedenti progetti di libreria Android nel modo normale.

Il problema è che vasi esterni non vengono inseriti nella cartella 'librerie' di default quando si utilizza Proprietà - Java Costruire Path- Aggiungere vaso esterno, invece sono posti sotto 'librerie di riferimento' al posto di 'Dipendenze' Android e questo causa NoClassDefFoundError.

Si prega di controllare Dealing with dependencies in Android projects per maggiori dettagli.

+0

Potresti estendere il tuo post spiegando come collegare ** sources ** e ** javadoc ** con questa configurazione? – JJD

+0

Ci sono alcune fonti di correzione "how-to" e javadoc nei commenti per questo problema segnalato: [Link] (http://code.google.com/p/android/issues/detail?id=27490) – Freddroid

+0

Nice ! Funziona bene! Grazie a @Freddman. –

0

Controlla la tua libreria gson nel percorso di costruzione. forse la bibliografia di Gson non è inaccessibile.

10

Per SDK Tools 17 è necessario rinominare la cartella del progetto della libreria da "lib" a "libs" come suggerito here. Dai anche un'occhiata a this.

0

scaricare il vaso GSON e fare come percorso di classe

2

Controllare l'ordine e seleziona in

Project->Properties->Java build path->Order and Export: 

Ordine e selezionare:

select Google APIs (optional) 
select Dependencies 
select Android Private Libraries 
[-] src 
[-] gen 

E nelle biblioteche scheda :

Dipendenze biblioteche private (vasi nella directory 'libs') Altri

Ha lavorato per me!

13
  1. fare clic destro del mouse sul progetto e scegliere Proprietà
  2. Vai a Java Build Path-Ordine e di esportazione.
  3. Spuntare 'Android biblioteche private'
  4. Fare clic su Project Clean
+0

Mi ha aiutato e mi ha risparmiato un sacco di ore –

+0

Grazie è stata l'unica cosa che mi ha aiutato – clearwater

0

sto usando GSON in un progetto di libreria, in modo da risolvere questo problema al di là aggiungere il barattolo GSON sul percorso di generazione, ho bisogno di dichiararlo sul mio progetto Libreria manifest come indicato di seguito:

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