Eclipse: java.lang.NoClassDefFoundError dla klas JDK w projekcie Android
Po pierwsze, chcę wspomnieć, że czytałemwiele posty stackoverflow oBłąd NoClassDefFoundError, a ja też o tym czytałemwiele inne blogi i strony internetowe, ale rozwiązania, które oferowali ludzie, nie rozwiązały tego problemu.
BiegamEclipse 64-bit z wtyczką ADT w wersji v21.0.1-543035 naUbuntu 12.10 64-bit. Wszystko jest 64-bitowe, Ubuntu, Eclipse oraz JRE i JDK, którego używam (jdk1.6.0_38).
Napisałem bardzo małą aplikację na Androida, która wymaga klasy z JDK do uruchomienia.
Wyodrębniłem trochę problem i odtworzyłem go, tworząc nowy „Projekt aplikacji na Androida”TYLKO JEDNA LINIA MOJEGO KODU (w głównej klasie w metodzie onCreate). Ta linia:
BufferedImage buff = new BufferedImage (100,100, BufferedImage.TYPE_INT_RGB);
Eclipse automatycznie dodaje niezbędny import:
import java.awt.image.BufferedImage;
ale prosi o dodanie słoików / JRE dla tej klasy.
Dodałem jdk1.6.0_38 do Eclipse w „Zainstalowane środowiska JRE” (tak jak pouczają na stronach pomocy Eclipse).
W „Ścieżce budowania Java” dodałem ją poprzez „Dodaj bibliotekę” -> „Biblioteka systemowa JRE” -> „Domyślne środowisko JRE”. Automatycznie dodał JDK do ścieżki budowania projektu.
Podczas kompilacji nie mam błędów. Tylko podczas uruchamiania aplikacji w emulatorze Android (dowolny AVD) pojawia się następujący błąd:
E/dalvikvm(828): Could not find class 'java.awt.image.BufferedImage', referenced from method com.example.usejdk.MainActivity.onCreate
W/dalvikvm(828): VFY: unable to resolve new-instance 467 (Ljava/awt/image/BufferedImage;) in Lcom/example/usejdk/MainActivity;
D/dalvikvm(828): VFY: replacing opcode 0x22 at 0x0009
D/dalvikvm(828): DexOpt: unable to opt direct call 0x0cdc at 0x0c in Lcom/example/usejdk/MainActivity;.onCreate
D/AndroidRuntime(828): Shutting down VM
W/dalvikvm(828): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
E/AndroidRuntime(828): FATAL EXCEPTION: main
E/AndroidRuntime(828): java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
E/AndroidRuntime(828): at com.example.usejdk.MainActivity.onCreate(MainActivity.java:16)
E/AndroidRuntime(828): at android.app.Activity.performCreate(Activity.java:5104)
E/AndroidRuntime(828): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
E/AndroidRuntime(828): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
E/AndroidRuntime(828): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(828): at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(828): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(828): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(828): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(828): at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(828): at dalvik.system.NativeStart.main(Native Method)
Oto rzeczy, które wypróbowałemnie działa:
dodanie do "eclipse.ini„położenie jdk („ -vm /usr/lib/jvm/jdk1.6.0_38/bin ”w 2 oddzielnych wierszach).Dodałem „Domyślne argumenty maszyny wirtualnej” ścieżki „-Djava.library.path = / usr / lib / jvm / jdk1.6.0_38 / jre / lib”.Korzystanie z 32-bitowych JRE i JDK oraz JRE / JDK7 - nie działało (oczywiście).Próbowałem dodać pliki jar jdkręcznie do folderu „libs” i zaznacz „dodaj do ścieżki budowania” - nie działa.Ponownie odinstalowałem i zainstalowałem Eclipse za pomocą narzędzia ADT i Android SDK ...Nic nie naprawia tego irytującego błędu ...
Proszę również zauważyć:
Upewniłem się, że jestem.classpath plik zawiera domyślny wpis JRE (jak mówią tutaj)Próbowałem dodaćinny pliki jar do folderu „libs” + „dodaj do ścieżki” i używając ich - działało dobrze.Próbowałem uruchomić ten sam kod (jedną linię) za pomocą „import java.awt.image.BufferedImage;” wregularny projekt java (nie projekt na Androida) i sprawił, że projekt „użył domyślnego JRE” - i todziałało dobrze! Dlaczego działa on na REGULARNYM projekcie Java, a nie na projekcie Android?Myślę, że to oznacza, że moja instalacja Eclipserobi mieć możliwość korzystania z klas jdk, alenie w aplikacjach na Androida.
Co więc muszę zrobić, aby uruchomić ten pojedynczy wiersz koduw aplikacji na Androida?
Każda pomoc byłaby BARDZO doceniana. Dzięki z góry.