it-swarm.com.de

NoClassDefFoundError - Eclipse und Android

Ich habe ein Problem beim Ausführen einer Android App, die, bis zum Hinzufügen einer zweiten externen Bibliothek zum Erstellungspfad, einwandfrei funktioniert hat. Seit dem Hinzufügen der scoreninja-JAR bekomme ich jetzt eine NoClassDefFoundError Wenn ich versuche, die App auszuführen.

Hier ist die Nachricht:

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

Da alle Build-Skripte von den Android (?)) - Tools generiert werden, bin ich mir nicht sicher, was ich außer dem Reinigen und Neuerstellen oder Neustarten von Eclipse noch tun kann (ich habe bereits alle drei ausprobiert) Weiß jemand, wie ich das ändern kann?

194
Tom R

Ich hatte dieses Problem nach dem Update von ADT.

Ich habe alle meine JAR-Dateien in einem Ordner namens "lib" gespeichert und die JAR-Dateien dem Erstellungspfad auf die normale Art und Weise von Eclipse hinzugefügt. Dies hat bis zu meinem Update gut funktioniert.

Nach meinem Update habe ich den NoClassDefFoundError für eine Klasse erhalten, von der ich deutlich sehen konnte, dass sie im Jar enthalten ist (Auschecken der ReferencedLibraries-Klassen).

Die Lösung bestand darin, meine Jars aus dem Erstellungspfad zu entfernen und meinen "lib" -Ordner in "libs" umzubenennen. Dies ist eine Ant-Konvention und scheint die Art und Weise zu sein, wie das neue ADT Bibliotheken in einer .apk-Datei findet und einschließt. Sobald ich das getan habe, hat alles gut funktioniert.

234
John O'Connor

Ich musste die JAR-Bibliothek nicht in Assets oder Libs ablegen, sondern nur das Kästchen für diese JAR in Properties -> Java Build Path -> "Order and Export") ankreuzen. (es wurde zuvor aufgeführt, aber nicht ausgewählt)

100
Till

Durch Hinzufügen der externen JAR-Datei zu Ihrem Erstellungspfad wird die JAR-Datei nur zu Ihrem Paket hinzugefügt, sie ist jedoch zur Laufzeit nicht verfügbar.

Damit das Glas um Laufzeit verfügbar ist, müssen Sie:

  • Stellen Sie das Glas in Ihren Ordner assets
  • Fügen Sie diese Kopie des Glases in Ihren Erstellungspfad ein
  • Gehen Sie im selben Popup-Fenster zur Registerkarte Export
  • Aktivieren Sie das Kontrollkästchen für das neu hinzugefügte Glas
68

Ich hatte dies für MapActivity. Builds in Eclipse erhalten NoClassDefFound im Debugger.

Passwort vergessen, Bibliothek zum Manifest hinzuzufügen, innerhalb von <Application>...</Application> Element

<uses-library Android:name="com.google.Android.maps" />
48
brian.clear

Ich habe die Reihenfolge der enthaltenen Projekte geändert (Eclipse/Build-Pfad konfigurieren/Reihenfolge und Export). Ich habe meine zwei abhängigen Projekte an den Anfang der Liste "Bestellen und Exportieren" verschoben. Es löste das Problem "NoClassDefFoundError".

Es ist seltsam für mich. Ich habe nicht über die Wichtigkeit der Reihenfolge der enthaltenen Bibliotheken und Projekte gehört. Android + Eclipse macht Spaß :)

27

Ich bin nicht sicher, ob dies zusammenhängt oder ob Sie überhaupt noch nach einer Antwort suchen, aber ich bin auf diesen Thread gestoßen, als ich versucht habe, denselben Fehler zu untersuchen (aber möglicherweise aus verschiedenen Gründen).

Ich konnte online keine Lösungen finden, aber eine Antwort auf einen ähnlichen Thread brachte mich zum Nachdenken und stellte fest, dass ich das Projekt wahrscheinlich nur neu erstellen (oder bereinigen) musste.

Gehen Sie in Eclipse zu Project => Clean. Wählen Sie Ihr Projekt aus und Eclipse schien es selbst zu reparieren. Für mich hat dies das Problem gelöst.

Hoffe das hilft.

15
Brian

Ich bin auf dasselbe Problem gestoßen. Der Grund war, dass die Bibliothek, die ich verwenden wollte, mit einem Standard-JDK 7 kompiliert wurde.

Ich kompilierte es mit dem -source 1.6 -target 1.6 Optionen und es hat gut funktioniert.

13
assylias

Das Gleiche hat bei mir funktioniert: Eigenschaften -> Java Build Path -> "Order and Export" Interessanterweise - warum wird das nicht automatisch gemacht? Ich vermute, dass einige Einstellungen fehlen. Auch das ist bei mir nachher passiert SDK-Upgrade.

7
vlad

John O'Connor hat Recht mit dem Thema. Das Problem bleibt bei der Installation von ADT 17 und höher. Diesen Link gefunden, um den Fehler zu beheben:

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

3
user1555123

Klicken Sie mit der rechten Maustaste auf Ihren Projektordner, suchen Sie unter Java Build-Pfad) nach Eigenschaften und wählen Sie die angezeigten JAR-Dateien aus. Es hat bei mir funktioniert.

3
zacharia

Ich hatte den gleichen Fehler mit ADT22. Behebt das Überprüfen von "Android Private Libraries" in den Eigenschaften -> Java= build path -> Order and export. Wenn Sie Bibliotheksprojekte verwenden, sollte dies auch für diese gemacht werden.

2
prijupaul

Ich habe alles in diesem Post (und einigen anderen Posts) ausprobiert und es hat bei mir nicht funktioniert. Dies ist mit Abstand das schrecklichste ADT-Upgrade, das ich je erlebt habe, und ich werde niemals ein Upgrade ohne ein funktionierendes ADT-Backup durchführen.

Es gelang mir, das Problem zu lösen, indem ich das Projekt entfernte und es dann mithilfe einer von mir erstellten Quellensicherung erneut hinzufügte.

2
Eli

Alle vorhandenen Antworten funktionieren bei mir nicht, weil mein Fall ein bisschen anders ist. Ich brauchte ein paar Stunden, um es zum Laufen zu bringen. Ich benutze Eclipse.

Mein Android Projekt enthält ein weiteres normales Java 1.6 Projekt, das eine JAR-Datei eines Drittanbieters benötigt. Der Trick ist:

  • fügen Sie das jar in das normale Java) Projekt ein, damit es (nur) kompiliert wird. Aktivieren Sie es nicht auf der Registerkarte "Bestellen und Exportieren"
  • kopieren Sie diese JAR-Datei auch in den Ordner "libs" des Projekts Android=), damit sie zur Laufzeit verfügbar ist

Hoffe das hilft denen, die ähnliche Szenarien haben wie ich.

2
Donald

Manchmal passiert es, wenn Sie jar, für das Sie eine Abhängigkeit haben, nicht mit dem Tag "uses-libary" in Ihrer AndroidManifest.xml einbinden.

Stellen Sie außerdem sicher, dass es sich innerhalb des Tags "application" befindet.

Grüße,

Ravi

1
Ravi Pandit

Ich hatte dieses Problem und es wurde dadurch verursacht, dass die Bibliothek nicht "exportiert" wurde. Das Problem bestand nur darin, dass die .class-Dateien für einige Klassen beim Packen der APK nicht verfügbar waren

In meinem Fall habe ich die Klasse "CusrsorAdapter" verwendet und unter "JavaBuildPath-> Order and Export" das Support-V4-Jar nicht überprüft.

Um sicherzustellen, dass Sie aus den oben genannten Gründen den Fehler noClassDefFound erhalten, überprüfen Sie bitte Ihr Logacat. Zur Laufzeit wird ein unbekannter Superklassenfehler angezeigt.

1
Sojan P R

manchmal muss man das ganze externe projekt als bibliothek nehmen und nicht nur das glas:

mein problem wurde gelöst, indem ich das ganze projekt (in meinem fall google-play-services_lib) als bibliothek hinzufügte und nicht nur das jar. Die Schritte dazu (von @ style answer ):

  1. Datei-> Neu-> Sonstige
  2. Wählen Sie Android Project
  3. Wählen Sie "Projekt aus vorhandener Quelle erstellen"
  4. Klicken Sie auf die Schaltfläche "Durchsuchen ..." und navigieren Sie zum gewünschten Projekt
  5. Fertig stellen (Jetzt Aktionsleistenprojekt in Ihrem Arbeitsbereich)
  6. Klicken Sie mit der rechten Maustaste auf Ihr Projekt -> Eigenschaften
  7. Klicken Sie im Abschnitt Android-> Bibliothek auf Hinzufügen
  8. zuletzt hinzugefügtes Projekt auswählen -> Ok
1
dvrm

Versuche dies:-

Schritt 1

Fügen Sie alle Bibliotheken hinzu, um pat in Eclipse zu erstellen (bedeutet, dass alle Bibliotheken referenziert werden).

Schritt 2

Löschen Sie die R.Java-Datei und erstellen Sie das Projekt erneut. Keine Sorge, R.Java wird automatisch neu erstellt.

Ausruhen :)

0
user1606195

nach der Aktualisierung von ADT habe ich zwei Tage lang versucht, dieses Problem zu lösen. Endlich hatte ich das Glück, diesen Beitrag hier zu bekommen:

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

das hat mich in die richtige Richtung geführt. Wenn Sie der Lösung folgen, denken Sie daran, die Android Support-Bibliothek aller Ihrer Projekte auf dieselbe Version zu setzen (entfernen Sie sie und installieren Sie sie erneut in den Projekten). Ich hoffe, dies hilft - viel Glück

0
Ron

Ich habe verschiedene Dinge ausprobiert und der Grund für den Fehler in meinem Fall war ein Konflikt zwischen maps.jar und Google Api in Java Build Path-> Libraries. Also, als ich die maps.jar entfernt habe, hat es gut funktioniert.

Grüße,

wahib

0
Wahib Ul Haq

bitte stellen Sie sicher, dass sich Ihre JAR-Datei im libs-Verzeichnis Ihres Projekts befindet, wenn Sie eine neuere ADT-Version mit Ihrer Eclipse verwenden.

0
samir

Sie haben das berüchtigte 64k-Limit erreicht und müssen Multidex aktivieren.

Das ist wie man es macht. https://developer.Android.com/tools/building/multidex.html

0
Ashish Rawat

Das passiert mir ziemlich oft.

Das letzte Mal, an das ich mich erinnern kann, ist darauf zurückzuführen, dass ich das Eclipse ADT (Google Special Edition) auf Android= Studio) umgestellt und zurückgeschaltet habe. Ich arbeite nicht für mich.

Irgendwann habe ich die App wieder zum Laufen gebracht (kein NoCalssDeffoundError mehr), indem ich mein IDE= auf Original-Eclipse (Kepler) mit ADT umgestellt habe.

0
tyolab

Wenn Sie Ihre Reihenfolge ändern und im Projekterstellungspfad exportieren, tritt dieser Fehler nicht auf. Die andere Möglichkeit, dies zu erreichen, ist .classpath in Ihrem Projektordner.

0
geekgugi

Ich habe genau das gleiche Problem ... Um es zu beheben, habe ich meine Android Private Libs in "build path" entfernt und auf ok geklickt ... und als ich den "build path" öffnete wieder hatte Eclipse sie wieder von selbst hinzugefügt, und dann hat es bei mir geklappt;) ...

0
pkdkk

Wenn Sie lieber wissen möchten, mit welchen Dateien die Problemumgehung zusammenhängt, habe ich Folgendes gefunden. Ändern Sie einfach die .classpath-Datei 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>

Ersetzen Sie die .classpath-Datei in allen Bibliotheksprojekten und in main Android project. Die .classpath-Datei befindet sich im Stammverzeichnis des Eclipse-Projekts. Vergessen Sie natürlich nicht, Ihre eigenen Klassenpfadeinträge hinzuzufügen , sollten Sie welche haben (vergleichen Sie diese mit Ihrer aktuellen Version von .classpath).

Ich glaube, dies ist das gleiche Ergebnis wie das Durchlaufen der Eclipse-Menüs, wie oben erklärt wurde (Eclipse/Build-Pfad konfigurieren/Reihenfolge und Export).

0
arberg

Die Lösung hier hat bei mir funktioniert. Es geht darum, die Bibliothek in den Ordner libs zu importieren, dann die Datei build.gradle zu ändern und anschließend mit gradlew zu bereinigen.

0
gabr10

Wie ich verstanden habe, zeigt Ihr Projekt keine Fehler, weil Sie die Jar enthalten. Der Jar wird jedoch nicht verwendet, wenn Ihr Projekt auf das Gerät "exportiert" wurde. Versuche dies

Projekt -> Eigenschaften

Java Build Path/Order und Export

[✔] Dein Glas

0
user3060608