ClassNotFoundException beim einbinden einer Bibliothek jar
In mein android-Projekt habe ich ein jar-Bibliothek in der libs
Ordner.
Diese jar-Datei enthält drei verschiedene Pakete:
- google GSON (com.google.gson)
- jboss netty (org.jboss.netty)
- Eine client-Anwendung, die ich selbst entwickelt habe, welches verwendet diese zwei anderen libs. (com.Beispiel.Kern)
Jar kompiliert/archiviert mit Hilfe von ant.
Gibt es keine Fehler in eclipse, aber wenn ich versuche zu laufen meine android-app auf einem Gerät bekomme ich diese:
E/AndroidRuntime(23807): FATAL EXCEPTION: main
E/AndroidRuntime(23807): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.project/com.example.project.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk
E/AndroidRuntime(23807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
E/AndroidRuntime(23807): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(23807): at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(23807): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(23807): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(23807): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(23807): at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(23807): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(23807): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(23807): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(23807): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(23807): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(23807): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk
E/AndroidRuntime(23807): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
E/AndroidRuntime(23807): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(23807): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(23807): at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
E/AndroidRuntime(23807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
E/AndroidRuntime(23807): ... 11 more
Und es ist definitiv mein Glas, verursacht dies, weil wenn ich Sie entfernen Verweise auf das s-Klassen aus der MainActivity dann ist das problem gelöst und die app läuft auf dem Gerät.
Mit apktool ich überprüft, um zu sehen, was geht in die apk, und ich fand, dass alles, was Hinzugefügt wird, die smali
- Verzeichnis, dass ist alles, außer mein Paket (com.Beispiel.core).
Also alle android-app-Klassen (com.Beispiel.Projekt), die gson (com.google.gson) und netty (org.jboss.netty) aus meine jar gibt es aber nicht com.Beispiel.core.
Meinem Umfeld:
Eclipse 4.2.1
ADT 21.0.1
Java 7 (oracle)
Geräten, die ich getestet auf:
Samsung galaxy S2
LG nexus 4
Irgendwelche Ideen?
Danke.
InformationsquelleAutor Nitzan Tomer | 2013-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie einen
NoClassDefFoundError
weil Ihre jar-Datei nicht zur Laufzeit verfügbar.In Reihenfolge für es zu sein, zur Laufzeit müssen Sie aktivieren Sie die Kontrollkästchen auf Ihre jar-Datei in Ihre java-build-Pfad wie in diesem Beispiel:
Order and Export
tab, nur die src-und gen-Ordner und den Android-Abhängigkeiten und Android 4.2. Aber wie ich schon schrieb in meiner Frage, einige Inhalte meiner jar Hinzugefügt wird, um die apk, aber nicht alles. Es ist also nicht wahr, dass mein Glas nicht zur Laufzeit verfügbar.InformationsquelleAutor Ahmad
Ok, ich habe es endlich geschafft, das problem zu finden, dauerte es eine Weile.
Ich bin mit java 7 auf meinem Rechner und die ant-generator verwendet diese Standard-version als auch, leider aber android nicht mag, java 7, so dass diese behoben das problem für mich:
Oder Sie können verwenden Sie diese Schritte in Eclipse:
Hoffe, dass dies etwas Zeit sparen für andere, die mit diesem problem konfrontiert.
InformationsquelleAutor Nitzan Tomer
(java build path /order and export) bewegen Sie den lib auf der Oberseite und der check-in
(java build path / libraries) klicken Sie auf add jar und fügen Sie gson jar-Datei aus dem Ordner libs
Von dem, was ich gelesen habe, in den neueren Versionen von ADT-Sie brauchen nicht zu tun, dass in der Tat man sollte das nicht tun. Es soll genug sein, um fügen Sie die benötigten Bibliotheken in das
libs
- Verzeichnis des Projekts.Ich habe nicht darüber gelesen. AFAIK müssen Sie noch hinzufügen, das Glas zu dem build-Pfad.
tools.android.com/recent/...
InformationsquelleAutor Anand
Für IntelliJ dieses setup endlich die Fehler gehen Weg für mich:
InformationsquelleAutor IHeartAndroid