Bei meinen Benutzern tritt häufig ein Fehler auf. Die App stürzt beim Start ab. Wenn die MainActivity geladen werden soll, kann die VM die Klasse anscheinend nicht finden. Ich kann nicht herausfinden warum. Die Architektur der App ist, dass es ein gemeinsames Projekt gibt, das sowohl meine kostenlose als auch meine Pro-Version verwenden. Ich weiß nicht, ob es relevant ist. Siehe die Stapelverfolgung unten. Irgendwelche Gedanken?
java.lang.NoClassDefFoundError: com.android.common.MainActivity
at com.mycompany.myapp.Splash.onCreate(Splash.java:23)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.android.common.MainActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.android.pro-1.apk]
Edit:
Danke für den Kommentar unten, Richard. Jetzt habe ich com.android.Splash
zu etwas anderem gewechselt . Es war sowieso nicht der richtige Klassenname. Mein Fehler...!
android
noclassdeffounderror
kjoelbro
quelle
quelle
com.android.*
). Das ist eine schlechte Form, versuchen Sie das Paket zu ändern.Antworten:
Ich hatte das gleiche Problem. Ich habe Folgendes getan, um das Problem zu beheben.
gen - automatisierter Code im Projekt (aus Abhängigkeiten und Referenzen)
src - Quellcode im Projekt
Die Eclipse musste nicht neu gestartet werden. Es hat gerade angefangen zu arbeiten.
Ehrlich gesagt habe ich noch nie "Android Tools> Projekteigenschaften korrigieren" ausprobiert, manchmal funktioniert es möglicherweise genauso. Ich weiß nicht, ich habe es gerade oben getan, nachdem ich die Fehlermeldung gesehen habe und dachte, dass etwas mit den Erstellungspfaden nicht stimmt.
Bearbeiten
Später war es nicht ausreichend, ich bekam den Fehler wieder. Dann habe ich alle in dieser Ansicht aufgeführten Abhängigkeiten "überprüft". Jetzt funktioniert es wieder. So weit, ist es gut. Ich werde dies auf dem neuesten Stand halten, wenn es erneut fehlschlägt.
Zu Ihrer Information : Bei meinem letzten Versuch habe ich "Android Tools> Projekteigenschaften korrigieren" ausprobiert, aber es hat für mich nicht funktioniert.
quelle
Ich verwende derzeit SDK 20.0.3 und keine der vorherigen Lösungen hat für mich funktioniert.
Ich konnte Dinge zum Laufen bringen
Dies brachte die erstellten Java-Klassendateien mit sich, die beim Erstellen des Android-Projekts für die Dalvik-VM anstelle der Java-VM kompiliert wurden. Dadurch konnten die Java-Klassendateien in der JAR-Datei der Android-Bibliothek beim Erstellen des Android-Projekts .apk dexiert werden. Als die App ausgeführt wurde, wurden die Java-Projektklassen gefunden, anstatt dass ein Java.lang.NoClassDefFoundError ausgelöst wurde.
Wenn Sie eine JAR-Datei verwenden möchten, anstatt die Quelle zu verknüpfen, müssen Sie ein Android-Bibliotheksprojekt erstellen. (Ein Android-Projekt mit 'Ist Bibliothek' ist in Eigenschaften -> Android aktiviert.) Anschließend müssen Sie entweder die Quelle des Java-Projekts wie oben beschrieben mit dem Android-Bibliotheksprojekt verknüpfen oder die Quelldateien aus dem Ordner 'src' von kopieren das Java-Projekt in den Ordner 'src' des Android Library-Projekts. Erstellen Sie das Android Library-Projekt. Anschließend können Sie die JAR-Datei des Android-Projekts, die erstellt wurde, in den Ordner 'libs' des Android-Ordners kopieren, da die darin enthaltenen Klassendateien beim Erstellen des Android-Projekts für die Davlik-VM anstelle der Java-VM kompiliert wurden. Auf diese Weise können die Java-Klassendateien in der JAR-Datei der Android-Bibliothek beim Erstellen des Android-Projekts .apk dexiert werden.
quelle
Gehen Sie zu Projekt -> Eigenschaften -> Java-Erstellungspfad -> Bestellen und Exportieren und stellen Sie sicher, dass die privaten Android-Bibliotheken für Ihr Projekt und für alle anderen von Ihnen verwendeten Bibliotheksprojekte aktiviert sind. Ich habe die Lösung erhalten, indem ich dem folgenden Link folge: NoClassDefFoundError Android Project ?
quelle
Nur für den Fall, dass es jemandem hilft, stand ich vor dem gleichen Problem. Meine JAR-Datei befand sich im libs-Verzeichnis und das JAR wurde dem Erstellungspfad hinzugefügt. Trotzdem warf es diese Ausnahme.
Ich habe gerade das Projekt gereinigt und es hat bei mir funktioniert.
Eclipse -> Projekt -> Bereinigen -> Wählen Sie das Projekt aus und bereinigen Sie es
quelle
Ich habe alle oben genannten Lösungen ausprobiert, aber für mich nicht funktioniert. Hier ist, was ich getan habe, um es fertig zu stellen. Projekt-> Konfigurationspfad erstellen-> bestellen und exportieren-> abhängiges Projekt nach oben verschieben
quelle
Dieser Fehler wird auch generiert, wenn Sie eine App erstellen, die die Google-API verwendet (z. B. Maps), diese jedoch auf einem Gerät ausführt, das auf die Android-API abzielt.
quelle
Ich bin auf diesen NoClassDefFoundError gestoßen, als ich java.nio.charset.StandardCharsets verwendet habe.
Der Grund ist, dass StandardCharsets bis JRE 1.7 nicht existiert hat. Wenn ich die Java-Kompilierungsversion auf 1.7 setze, hat sich Eclipse beschwert, dass "Android die Compiler-Konformitätsstufe 5.0 oder 6.0 erfordert". Also habe ich es behoben, indem ich mit der rechten Maustaste auf den Projektnamen-> Android Tools-> Fix Project Properties geklickt habe. Es ist mit JRE1.6 kompiliert.
Da StandardCharsets jedoch erst ab 1.7 vorhanden waren. Es hat NoClassDefFoundError gemeldet, als ich es ausgeführt habe.
Ich habe dies erst erkannt, nachdem ich viele andere Methoden ausprobiert hatte, einschließlich der Neuinstallation von JDK. Der wahre Grund wird durch die Bedeutung von NoClassDefFoundError deutlich: Die Klasse kann zur Laufzeit nicht gefunden werden, obwohl sie die Kompilierung bestanden hat.
Die allgemeine Schlussfolgerung lautet, dass dieser Fehler auftritt, solange Android nicht mit JRE 1.7 funktioniert. Wenn Sie eine neue Funktion verwenden, die seit 1.7 bereitgestellt wird.
Meine Lösung ist, dass ich diesen Quellcode in meinen Code kopiert habe!
quelle
Die NoClassDefFoundError-Beschreibung stammt aus dem SO-Tag:
Oder besser:
von dieser Seite. Überprüfen Sie es, es gibt einige Möglichkeiten, um den Fehler zu beheben. Ich hoffe, es hilft.
quelle
ConcurrentSkipListMap
; Ich denke, das liegt daran, dass meine Anwendung auf einem Froyo-Gerät ausgeführt wurde und diese Klasse in Froyo fehlt. AdMob verlangt jedoch, dass ich auf Ice Cream Sandwich ziele, damit ich das nicht bemerkt habe!In meinem Fall habe ich versucht, eine mit jre 1.7 kompilierte normale Java-Klasse (aus einem normalen Java-Projekt) zu einem mit jre 1.7 kompilierten Android-App-Projekt hinzuzufügen.
Die Lösung bestand darin, diese normale Java-Klasse mit jre 1.6 neu zu kompilieren und wie gewohnt Verweise auf das Android-App-Projekt (auch mit jre 1.6 kompiliert) hinzuzufügen (in Registerkartenreihenfolge und beim Export überprüfen Sie unbedingt die Klasse, das Projekt usw.).
Der gleiche Vorgang, wenn eine Android-Bibliothek verwendet wird, um auf externe normale Java-Klassen zu verweisen.
Ich weiß nicht, was mit jre 1.7 falsch ist, wenn ich normale Java-Klassen aus einem normalen Java-Projekt kompiliere und versuche, sie in Android-App- oder Android-Bibliotheksprojekten zu referenzieren.
Wenn Sie keine normalen Java-Klassen (aus einem normalen Java-Projekt) verwenden, müssen Sie kein Downgrade auf jre 1.6 durchführen.
quelle
Für mich hing dieses Problem mit der API zusammen, die ich verwendet habe und die nicht bereitgestellt wurde. Zum Beispiel habe ich a
ZSDK_API.jar
als Referenz verwendet.Um das Problem zu beheben, musste ich mit der rechten Maustaste auf das Projekt klicken und Eigenschaften auswählen. In JAVA BUILD PATH musste ich die API hinzufügen, die nicht bereitgestellt wurde. Dies war seltsam, da die App die nicht gefundene MainActivity-Klasse auslöste und der Fehler in Wirklichkeit dadurch verursacht wurde, dass die DiscoveryHandler-Klasse nicht gefunden wurde.
Hoffe das hilft jemandem.
quelle
Ich habe NoClassDefFoundError für eine Klasse getroffen, die in meinem Projekt vorhanden ist (keine Bibliotheksklasse). Die Klasse existiert, aber ich habe NoClassDefFoundError. In meinem Fall war das Problem die Multidex-Unterstützung. Das Problem und die Lösung sind hier: Android Multidex und Support-Bibliotheken
Sie erhalten diesen Fehler für Android-Versionen unter 5.0.
quelle
Auf Android Studio:
1) Fügen Sie
multiDexEnabled = true
Ihre Standardkonfiguration hinzu2) Fügen Sie compile com.android.support:multidex:1.0.0 in Ihre Abhängigkeiten ein
3)
Application class
verlängernMultiDexApplication
statt nurApplication
quelle
Andere Idee. Beispielsweise haben Sie eine Klasse, die von "android.support.v4.app.Fragment" abgeleitet ist.
Sie haben jedoch einen Fehler gemacht und ihn von "android.app.Fragment" geerbt. Dann wird dieser Fehler auf den Android 2-Geräten angezeigt.
quelle
Ich habe gerade etwas mit diesem Fehler herausgefunden.
Stellen Sie einfach sicher, dass die JAR-Datei der Bibliothek die kompilierte R-Klasse unter dem Paket android.support.v7.appcompat enthält, und kopieren Sie alle Res im v7-Appcompat-Support- "Projekt" in Ihren Ordner ANDROID_SDK_HOME / extras / android / support / v7 / appcompat.
Ich verwende Netbeans mit dem Android-Plugin und dies hat mein Problem gelöst.
quelle
Ich vermute, dass Sie
javac
beim Erstellen der allgemeinen Bibliothek nicht das Ziel angeben , sondernjavac
automatisch das neueste verfügbare Ziel verwenden, das wahrscheinlich 1,7 (Java7) oder 1,8 (Java8) ist.Es wurde bereits festgestellt, dass
dx
der Build-Tools von Android <19.0.0 kann Java7-Bytecode (oder höher) nicht in Dalvik-Bytecode konvertieren.Verwenden Sie also entweder eine Build-Tool-Version> = 19.0.0 oder eine Verwendung
javac
mit -target 6 , indem Sie beispielsweise Ihre Ameisebuild.xml
wie folgt ändern :<javac srcdir="src/" destdir="build/" target="6" />
quelle
Ich habe dieses Problem behoben, indem ich den Projektpfad der Bibliothek manuell in project.propertied hinzugefügt habe. Einige, wie Eclipse diesen Eintrag nicht automatisch zusammen mit "Projekt hinzufügen" hinzugefügt hat. Der Punkt, an dem die App versuchte, Komponenten innerhalb des lib-Projekts zu referenzieren, stürzte ab.
Sie können auch das gleiche versuchen. App-Abhängigkeit in projec.properties wie
und Renn .
quelle
JARs befanden sich früher im Ordner lib /, jetzt befinden sie sich in libs / Wenn Sie lib verwenden, können Sie Ihre Jars von lib in libs verschieben und die Abhängigkeiten aus den Projekteigenschaften / dem Java-Erstellungspfad entfernen, da Android sie jetzt automatisch findet .
quelle
Für mich bestand das Problem darin, dass die Bibliothek, auf die verwiesen wird, mit Java 7 erstellt wurde. Ich habe dieses Problem gelöst, indem ich es mit dem 1.6 JDK neu erstellt habe.
quelle
Einige Zeit java.lang.NoClassDefFoundError: Fehler, wenn ART anstelle der Dalvik-Laufzeit verwendet wird. Um die Laufzeit zu ändern, gehen Sie einfach zu Developer Option -> Select Runtime -> Dalvik.
quelle
Wenn keines der oben genannten Verfahren funktioniert (wie es mir passiert ist) und Sie ein anderes Projekt in Eclipse als Bibliothek verwenden.
Gehen Sie dazu folgendermaßen vor: Klicken Sie mit der rechten Maustaste auf Projekt -> Eigenschaften -> Android -> Bibliothek -> Hinzufügen
Das hat es für mich getan! Hinzufügen eines Projekts als Bibliothek (Projekteigenschaften)
quelle
Aktivität erneut zum Manifest hinzugefügt. Ich habe es in meinem Manifest versucht, dann hat die App funktioniert.
<activity android:name="com.xxx.xxx.MainActivity"
quelle
Versuchen Sie zu gehen
Ich hoffe, es hilft.
quelle
Lösungen:
quelle
quelle