NoClassDefFoundError auf externem Bibliotheksprojekt für Android

Ich benutze Eclipse für Google Android Entwicklung.

Ich habe ein Bibliotheksprojekt erstellt ( [x] Is Library in den Android-Einstellungen), die eine externe JAR-Datei (referenzierte Bibliotheken) enthält. Dieses Bibliotheksprojekt wird in einem anderen Projekt referenziert (das eigentliche Projekt, das das Bibliotheksprojekt verwendet). Dies geschieht durch Hinzufügen des Projekts unter den Android-Einstellungen.

Die Quelle kompiliert aber wenn ich es auf dem Gerät ausführen möchte, bekomme ich die NoClassDefFoundError für eine Klasse, die sich in der JAR-Datei befindet, die im Bibliotheksprojekt enthalten ist .

Bearbeiten: Die JAR-Datei wird den exportierten Einträgen hinzugefügt ( [x] my.jar auf dem Order and Export -Tab aus dem Bibliotheksprojekt)

Gibt es einen sauberen Weg, um diese Arbeit zu bekommen?

  • Schreiben Sie ZipEntry Daten in String
  • Fragment ohne Ansicht stürzt bei Konfigurationsänderung ab
  • Android Google Maps V2 - Sd Karte als Tile Provider
  • Cookie-Manager verursacht tödliches Signal 11
  • Wie verstelle ich die Verzögerung bei Android?
  • IntentService: warum mein onHandleIntent niemals angerufen wird?
  • Ist das als Reflexion und in welchem ​​Ausmaß?
  • Verlängere Android virtuelle Tastatur
  • 7 Solutions collect form web for “NoClassDefFoundError auf externem Bibliotheksprojekt für Android”

    Es wurde in der offiziellen API hier klar gesagt:

    Ein Bibliotheksprojekt kann eine JAR-Bibliothek enthalten

    Sie können ein Bibliotheksprojekt entwickeln, das selbst eine JAR-Bibliothek enthält, aber Sie müssen den Buildpfad des abhängigen Anwendungsprojekts manuell bearbeiten und einen Pfad zur JAR-Datei hinzufügen

    Der jar lib muss manuell dem Buildpfad des abhängigen Anwendungsprojekts hinzugefügt werden, nicht nur der Bibliotheksprojektaufbaupfad selbst.

    Update von SDK r17:

    Dies wird automatisch von ADT behandelt, check out neue Funktion für ADT 17.0.0 Release hier :

    Zusätzliche Funktion zum automatischen Einrichten von JAR-Abhängigkeiten. Alle .jar-Dateien im Ordner / libs werden der Build-Konfiguration hinzugefügt (ähnlich wie das Ant-Build-System funktioniert). Außerdem werden die von Bibliotheksprojekten benötigten Dateien automatisch zu Projekten hinzugefügt, die von diesen Bibliotheksprojekten abhängen. ( Mehr Info )

    Für diejenigen, die die Schritte befolgen (sogar die Projekte in "Order and Export") und immer noch die java.lang.ClassNotFoundException in der API 17, ist der letzte Schritt zu überprüfen, dass Ihr Compiler nicht mit Java 1.7 laufen. Wenn es 1,7 ist, dann sollten Sie es auf 1.6 für alle Ihre Projekte ändern. Danach wird es gebeten, alle Projekte wieder aufzubauen und erfolgreich auf meinem Handy zu laufen 🙂

    Um die Java-Kompilierungsversion in Eclipse zu ändern, befindet sich diese sich in: Projekteigenschaften> Java Compiler> Compiler Compliance Level: 1.6

    Gehen Sie zu den project properties -> build path-> libraies

    Wenn du deine JAR-Dateien so siehtst

     snmp4j.jar - e:\software\jars 

    Es kann dein Problem sein

    Füge den libs-Ordner in deinem Projekt hinzu und kopiere die JAR-Datei in diesen Ordner. Klicken Sie mit der rechten Maustaste auf die JAR-Datei und gehen build path -> add to build path . Dann kannst du dein Glas sehen

     snmp4j.jar - project_name/libs 

    Es hat für mich gearbeitet

    Ich hatte zwei Projekte mit der gleichen Bibliothek: eine Arbeit, die andere stürzt mit java.lang.NoClassDefFoundError . Nachdem mir nichts anderes geholfen hatte, schaute ich in die Datei project.properties im Wurzelverzeichnis meines Projektes. Das Arbeitsprojekt hatte die android.library.reference Linie (die letzte Zeile unten), die Absturzung hat nicht:

     # Project target. target=android-17 android.library.reference.1=../my-library-project 

    Ich habe die Linie manuell hinzugefügt und es hat angefangen zu arbeiten! (Ja, ich habe versucht, beide (Projekt) Eigenschaften – Java Build Pfad – Projekte und (Projekt) Eigenschaften – Java Build Pfad – Reihenfolge und Exporte – nichts geholfen.)

    PS Übrigens hat "Projekt-Eigenschaften" auch die Registerkarte "Projektreferenzen". Keine Ahnung, ob es funktionieren würde.

    Ich hatte ein kleines Problem, als ich auf ADT17 aufbrach, wo meine libs nicht richtig importiert wurden. Stellt sich heraus, das ist, weil meine Bibliotheken wurden als Abhängigkeiten aus meinem lib Ordner nicht libs verknüpft!

    Scheint, dass Bibliotheken ab jetzt im libs-Ordner sein müssen

    Ich hatte ein ähnliches Problem und nicht die hier ausgelösten Lösungen.

    Kurze Version: Die JAR wurde in Java 1.7 kompiliert und konnte von Dalvik nicht gefunden werden.

    Wir bauen eine interne JAR, die wir über Backend und mobile Clients mit Maven teilen. Das Problem endete, dass das JAR mit Java 1.7 kompiliert wurde. Androids dalvik unterstützt nur Java 1.5 und 1.6. Das ist der Grund, warum alles in Eclipse gut funktioniert, da es an dieser Stelle nicht zu dalvik kompiliert ist.

    Wir haben sogar die Ziel- und Quellversion im Maven Compiler Plugin angegeben , um mit Java 1.6 zu kompilieren. Dies funktionierte nicht, weil nur JDK 1.7 auf dem Build-Rechner installiert wurde. Eine kleine Notiz am unteren Rand der Maven Seite gab uns den Hinweis: Note: Merely setting the target option does not guarantee that your code actually runs on a JRE with the specified version.

    Um zu sehen, ob Sie dieses Problem auch haben, benennen Sie Ihre *.jar Datei zu *.zip entpacken Sie es und schauen Sie in die MANIFEST.MF Datei für den Build-Jdk: Parameter, um zu sehen, welche Java-Version tatsächlich Ihr JAR kompiliert hat.

    Eine andere Sache, um Aufmerksamkeit zu bezahlen ist Bibliothekspaketnamen.

    Wenn Sie ADT21 verwenden und Sie zufällig Bibliotheken haben, die denselben Paketnamen haben, wird es während des Kompilierens Fehler geben, aber es wird immer noch kompiliert und in Eclipse ausgeführt und gibt Ihnen eine APK, die einige der Ressourcenklassen fehlt. Daher der Absturz beim Ausführen der App.

    Wenn du es mit ANT kompilierst, dann kannst du den Kompilierungsfehler sehen, der besagt, dass zwei oder mehr Bibliotheken denselben Paketnamen verwenden.

    Um dies zu beheben, benennen Sie Ihr Bibliotheksprojekt um, indem Sie Android Tools -> Anwendungspaket umbenennen. Dann geht alles wieder normal.

    Es hat mir fast den ganzen Tag gebraucht, um das herauszufinden …

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.