2012-03-22 13 views
43

Dzisiaj zaktualizowałem narzędzia ADT i SDK do wersji 17, a moje projekty zostały użyte przy użyciu Gsonowa biblioteka Google'a rzuciła NoClassDefFoundError. Oto dane wyjściowe logcat:Gson NoClassDefFoundError po aktualizacji narzędzia ADT i SDK Tools do wersji 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) 

jakieś pomysły?

+0

Czy próbowałeś oczyścić projekt z zaćmienia? – DNRN

Odpowiedz

77

Dziś spotkałem się z podobnym problemem.

to ustalone to dla mnie:

  • usunąć wszystkie projekty Android Biblioteka i słoiki zewnętrzne od ścieżki kompilacji.
  • Utwórz w swoim projekcie folder o nazwie "libs".
  • Umieść wszystkie zewnętrzne .jary w tym folderze, ADT powinien teraz umieścić je w "zależnościach Androida".
  • Ponownie zaimportuj wszystkie dotychczasowe projekty biblioteki Android w normalny sposób.

Problem jest, że słoiki zewnętrzne nie są umieszczone w folderze „libs” domyślnie przy użyciu Właściwości - Java Budowanie Path- Dodaj Jar zewnętrzne, zamiast zostały objęte „Przypisane Biblioteki” zamiast „współzależności” Androida i to powoduje błąd NoClassDefFoundError.

Aby uzyskać więcej informacji, sprawdź numer Dealing with dependencies in Android projects.

+0

Czy możesz przedłużyć swój post wyjaśniający, w jaki sposób połączyć ** źródła ** i ** javadoc ** z tą konfiguracją? – JJD

+0

W komentarzach do zgłaszanego problemu znajdują się niektóre instrukcje "jak to zrobić" i komentarze do javadoców: [Link] (http://code.google.com/p/android/issues/detail?id=27490) – Freddroid

+0

Nice ! Działa w porządku! Dzięki @Freddman. –

0

Sprawdź swoją bibliotekę Gson w ścieżce budowania. może libraty gsona nie są dostępne.

10

Dla SDK Tools 17 należy zmienić nazwę folderu projektu biblioteki z "lib" na "libs" zgodnie z sugestią here. Zobacz także this.

5

Ta strona ma najprostsze rozwiązanie, które pracowały dla mnie, zaznacz pole wyboru biblioteki w pozycji „Zakonu i eksportu”.

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

+2

to naprawiło to dla mnie, ale zamiast "czyszczenia" projektu, musiałem ponownie uruchomić zaćmienie. – CQM

+0

@ CQM, dzięki za komentarz, dla mnie ponowne uruchomienie Eclipse również działało, podczas czyszczenia projektu nie. – GChorn

0

ściągnięciu słoik GSON i zrobić jak ścieżki klasy

2

Sprawdź zamówienie i wybiera w

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

Zakonu i wybrać:

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

A w bibliotekach karcie :

Zależności prywatnych bibliotek (słoiki w katalogu 'libs') Inne

pracował dla mnie!

13
  1. prawym przyciskiem myszy projekt, a następnie wybierz Właściwości
  2. Go zbudować Java Path zamówienie i eksportu.
  3. Kliknij Projekt
  4. zaznaczyć "Android Prywatnych bibliotek, Clean
+0

Pomogło mi to zaoszczędzić wiele godzin –

+0

Dzięki, że to była jedyna rzecz, która pomogła mi – clearwater

0

Używam GSON w projekcie biblioteki, tak aby rozwiązać ten problem poza dodać słoik GSON na kompilacji ścieżki, musiałem zadeklarować w moim manifeście projektu biblioteki jak poniżej:

<uses-library android:name="com.google.gson" /> 
Powiązane problemy