Android Activity ClassNotFoundException – alles versucht

Ich habe gerade eine App in eine Framework-Bibliothek und eine Anwendung umgestaltet, aber jetzt, wenn ich versuche und die App im Emulator starten bekomme ich die folgende Fehler Stack Trace:

06-02 18:22:35.529: E/AndroidRuntime(586): FATAL EXCEPTION: main 06-02 18:22:35.529: E/AndroidRuntime(586): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.matthewrathbone.eastersays/com.matthewrathbone.eastersays.EasterSimonSaysActivity}: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk] 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4627) 06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method) 06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:521) 06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method) 06-02 18:22:35.529: E/AndroidRuntime(586): Caused by: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk] 06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 06-02 18:22:35.529: E/AndroidRuntime(586): ... 11 more 

Normalerweise bedeutet dies, dass die Manifest-Datei in irgendeiner Weise falsch ist, aber ich habe alles überprüft, was ich mir vorstellen kann.

Hier ist meine Aktivitätsklasse:

 package com.matthewrathbone.eastersays; import android.os.Bundle; import com.rathboma.simonsays.Assets.Season; import com.rathboma.simonsays.SeasonPicker; import com.rathboma.simonsays.SimonSaysActivity; public class EasterSimonSaysActivity extends SimonSaysActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public SeasonPicker getSeasonPicker() { return new SeasonPicker(){ @Override public Season getSeason() { // TODO Auto-generated method stub return Season.EASTER; } }; } } 

Wie Sie sehen können, ist es im Manifest richtig aufgeführt:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.matthewrathbone.eastersays" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".EasterSimonSaysActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Ich habe keine Ahnung, wie ich das beheben kann, und würde jede Hilfe schätzen. Ich habe viele ähnliche Fragen auf SO gescannt, ohne dieses besondere Verhalten zu sehen.

Weitere Informationen:

  • Ich habe in der generierten APK überprüft und die Klasse hat einen Eintrag in der classes.dex Datei
  • Ich habe versucht, das Projekt in Eclipse zu reinigen / zu bauen
  • Ich habe versucht, ein völlig neues Gerätebild zu verwenden, das noch keine Kopie der APK hat
  • Ich habe das Bibliotheksprojekt in ein regelmäßiges Java umgewandelt und dann wieder in ein Android-Projekt umgewandelt, kein Unterschied
  • Das Hinzufügen der abstrakten SimonSaysActivity zum Manifest macht keinen Unterschied.
  • Ich habe versucht, jede Abhängigkeit ein Android-Bibliothek-Projekt, und die Synchronisierung der Android-Version, die sie benötigen, hat es nicht helfen

Gefunden die Lösung (siehe unten). Für alle, die eine Antwort / Kommentar geschrieben haben: Sie alle Rock, danke für die Hilfe bei der Arbeit durch die Probleme!

Sieht so aus, dass dies durch ein SDK-Tools-Upgrade eingeführt wird. Dank @Nick unten in den Kommentaren zu diesem Link: http://iqadd.com/item/noclassdeffounderror-adt-fix

  • Dagger 2 erzeugte Testkomponente wurde nicht erkannt
  • ImageView wird nicht in Nexus 5 (Android 6.0) angezeigt
  • Adb-Touchscreen-Swipe schlägt in einem Anruf
  • Android onTouchEvent Koordinaten überspringen
  • Wie kann ich Informationen in einer Android-Aktivität von einem Hintergrunddienst aktualisieren?
  • Datei mkdirs () Methode funktioniert nicht in Android / Java
  • Abstand zwischen den Tasten entfernen
  • Wie kann ich feststellen, ob ein Pfad eine lokale Datei ist oder nicht
  • 15 Solutions collect form web for “Android Activity ClassNotFoundException – alles versucht”

    Ich verbrachte einige Zeit mit meinem eigenen Projekt zu spielen, und ich bin in der Lage, Ihr Problem zu replizieren und bekomme genau die gleiche Ausnahme Stack Trace beim Versuch, mein Hauptprojekt laufen, so dass ich denke, das könnte die Ursache sein:

    Genau wie das, was ich dachte, es geht darum, wie Sie auf Ihr Android-Bibliotheksprojekt im Android-Hauptprojekt verweisen, eine einfache Eclipse-Konfigurationseinstellungen.

    Der falsche Weg:
    Klicken Sie mit der rechten Maustaste auf Hauptprojekt, wählen Sie Properties -> Java Build Path -> Projects -> Add... , fügen Sie die Android-Bibliothek Projekt als Abhängigkeitsprojekt in Android-Hauptprojekt-Build-Pfad hinzu, das funktioniert nicht. Wenn alle benötigten Android-bezogenen Ressourcen im Hauptprojekt definiert sind, erhalten Sie bei der Kompilierzeit keine Fehler, aber wenn Sie die Anwendung ausführen, erhalten Sie die in der Frage beschriebene Ausnahme.

    Der richtige Weg:
    Klicken Sie mit der rechten Maustaste auf Hauptprojekt, wählen Sie Properties -> Android , im Bereich Bibliothek, fügen Sie hier Ihr Android-Bibliotheksprojekt hinzu. Check out offizielle dev guide Referenzieren eines Bibliotheksprojekts . Dies sollte alles Problem beheben. Beachten Sie auch, dass Sie die relative Pfadreferenz das eigentliche Android-Bibliotheksprojekt verwenden müssen, wie in den Bibliotheksprojekt – Entwicklungsüberlegungen angegeben .

    Hoffe das hilft.

    Ich habe den Code getestet, den du gegeben hast, und es funktioniert gut. Versuchen Sie, die "verlängert SimonSaysActivity" zu ändern, um einfach "erweitert Aktivität" und sehen Sie selbst, dass es funktioniert.

    Der Grund, dass es nicht funktioniert ist entweder SimonSaysActivity nicht erweitern Aktivität (was ich glaube nicht, dass Sie diesen Fehler gemacht haben), oder die Reihenfolge der Build-Pfad ist falsch.

    Um in die Reihenfolge des Bauweges zu gehen, geh zu:

     project->properties->Java build path->order and export . 

    Meine grundlegende Bestellung ist: Projekt src, Projekt Gen, Android 4.0.3, android Abhängigkeiten.

    Dieses Problem tritt normalerweise auf, wenn Sie Bibliotheken verwenden.

    Ich habe gerade eine App in eine Framework-Bibliothek und eine Anwendung umgestaltet.

    Ich bin nicht ganz sicher, was du hier zu sagen versuchst, aber die Tatsache, dass du das Wort "refactored" benutzt hast, führt mich dazu, zu glauben, dass du das Konzept eines Bibliotheksprojekts missverstanden hast.


    Welche Bibliotheksprojekte sind :

    Ein Bibliotheksprojekt ist ein Entwicklungsprojekt, das gemeinsam genutzten Quellcode und Ressourcen enthält. Andere Android-Projekte können auf das Bibliotheksprojekt verweisen und seine kompilierten Quellen in ihre .apk-Dateien zur Kompilierzeit aufnehmen.

    Welche Bibliotheksprojekte sind nicht :

    Ein Bibliotheksprojekt unterscheidet sich von einem Standard-Android-Projekt dadurch, dass man es nicht direkt zu einer einzigen .apk Datei .apk kann und es auf einem Android-Gerät ausführen kann. Sie können keine Android-Projekte als Bibliotheksprojekt verwenden und dann ein anderes Android-Projekt erweitern das Bibliotheksprojekt. Es funktioniert nicht so.


    Das heißt, ich würde die Struktur Ihres Bibliotheksprojekts untersuchen und versichern, dass Sie es richtig eingerichtet haben . Es ist OK, deine Bibliothek zu benutzen, um freigegebenen Code / Ressourcen zu speichern, aber wenn deine Bibliothek versucht, sich zu benehmen, als ob es eine separate .apk innerhalb des Bibliotheksprojekts selbst wäre, dann hast du wahrscheinlich etwas falsch gemacht Ich glaube, eine ClassNotFoundException würde geworfen werden, wenn dies der Fall wäre. Um das Problem zu beheben, würde ich einfach das Bibliotheksprojekt von Grund auf neu anlegen, anstatt zu versuchen, das Android-Projekt in ein Bibliotheksprojekt umzuwandeln. Das wird dich daran hindern, in winzige, lästige Bugs zu laufen.

    Fühlen Sie sich frei, mehr Code zu posten, wenn Sie noch Probleme haben. Sie sollten auch ein bisschen mehr über die Struktur (und Zweck) Ihres Bibliotheksprojekts erarbeiten … warum haben Sie sich entschlossen, einen zu benutzen, wie Sie ihn erstellt haben usw.

    Ich hatte dieses Problem mit einem Projekt, an dem ich arbeitete, obwohl mein Fall anders war. Wenn jemand da draußen immer noch nicht finden kann die Lösung für ihr Problem, versuchen Sie dies zu überprüfen:

    In Eclipse:

     Project properties -> Java Build Path -> Source tab 

    Im Inneren finden Sie eine Liste mit allen Quellordnern zu kompilieren und in die generierte apk jedes Mal, um Ihr Projekt (und / gen ) zu bauen. Tipisch:

     >MyProject/gen >MyProject/src 

    Was Sie sicher sein wollen, ist, dass in jedem Ihrer Quellordner (ausschließen / gen , also nur / src in diesem Fall) der Element Ausgabeordner auf den Standardausgabeordner, der MyProject/bin/classes ist, MyProject/bin/classes . Führen Sie dies aus, indem Sie den Ausgabeordner auswählen und auf die Schaltfläche Entfernen aus dem rechten Satz von Schaltflächen klicken. Dadurch wird der Standardordner angezeigt.

    Wenn Sie den Subitem-Ausgabeordner nicht sehen können, markieren Sie "Zulassen von Ausgabeordnern für Quellordner" direkt unterhalb der Liste

    Für Eclipse Kepler (Mac): Klicken Sie mit der rechten Maustaste auf Projekt -> Android Tools -> Supportbibliothek hinzufügen

    ClassNotFoundException in Java ist eine Unterklasse von java.lang.Exception und kommt, wenn Java Virtual Machine versucht, eine bestimmte Klasse zu laden und die angeforderte Klasse im Klassenpfad nicht gefunden hat.

    Lesen Sie mehr: http://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html#ixzz3yX3WBeFA

    Versuchen Sie, zu Project -> Properties -> Java Build Path -> Order & Export und bestätigen Android Private Bibliotheken werden auf Ihr Projekt und für alle anderen Bibliotheksprojekte überprüft, die Sie in Ihrer Anwendung verwenden.

    Wie man mit der ClassNotFoundException umgehen kann

    1. Vergewissern Sie sich, dass der Name der angeforderten Klasse korrekt ist und dass die entsprechende .jar- Datei in Ihrem Klassenpfad vorhanden ist . Wenn nicht, müssen Sie es explizit zum Klassenpfad Ihrer Anwendung hinzufügen.
    2. Falls die angegebene .jar-Datei in deinem Klassenpfad existiert, wird der Klassenpfad deiner Anwendung überschritten und du musst den exakten Klassenpfad finden, der von deiner Anwendung verwendet wird.
    3. Falls die Ausnahme von einer Drittanbieterklasse verursacht wird, müssen Sie die Klasse identifizieren, die die Ausnahme auslöst , und fügen Sie dann die fehlenden .jar- Dateien in Ihren Klassenpfad hinzu .

    Während dies für alle nicht anwendbar ist, hatte ich vor kurzem dieses Problem, weil mein Projekt nicht mit einer gemeinsamen Bibliothek auf dem Gerät verknüpft war. Ich hatte vergessen , in meinem Manifest zu spezifizieren, dass meine Anwendung <uses-library> .

    Beseitige classes.dex aus bin und rebuild project

    Welche Schnittstellen oder übergeordnete Klassen macht SimonSaysActivity verwenden / erweitern und sind sie auf der Version von Android verfügbar, die Sie verwenden? Ich habe ähnliche Probleme gesehen, bei denen meine Aktivität eine API-Schnittstelle implementiert hat, die auf der Version von Android, die ich verwendete, nicht verfügbar war.

    In meinem Fall implementierte meine Aktivität die Schnittstelle PopupMenu.OnDismissListener, die nur in API 14 verfügbar ist, aber als ich die App auf meinem 2.3 Gerät lief, erhielt ich eine java.lang.NoClassDefFoundError Ausnahme für die Aktivität.

    Ich hatte das gleiche Problem und verschwand die meisten von einem Tag versuchen alle möglichen Dinge. Die App lief finden, wenn von einem PC, aber nicht auf diesem einen PC eingesetzt. Am Ende war es eine fehlende Java Natur! Seltsam, wie es mir zeigte, dass ich Java bauen Pfade, Ordnung / Export und alles, was aber noch keine Java-Natur hatte. πŸ™ Hoffe das spart jemand anderes viel Zeit

    Wenn ihr alle Hinweise befolgt habt (überprüft die privaten Bibliotheken etc.) und noch den Fehler haben. Überprüfen Sie Ihr Manifest für diese Codezeile im Anwendungs-Tag

      android:hasCode="false" 

    Entfernen und glücklich sein (Ich war endlich) πŸ™‚

    Lösung von @yorkw ist absolut richtig. Ich hatte ein zusätzliches Problem, in einer der Layout-Dateien hatte ich den absoluten Namen falsch erwähnt. Es hätte sein sollen

     <android.support.v4.view.ViewPager xmlns:android="... 

    Eher habe ich es gesagt

     <android.support.v4.app.view.ViewPager xmlns:android="... 

    Nach der Lösung dieser, es funktionierte gut.

    Glauben Sie es oder nicht, das Update für mich war, die alte Version (2.0) von Google Analytics Bibliothek aus meinem Projekt zu entfernen, nachdem ich alles für mindestens 4 Stunden versucht habe. Natürlich könnte ein Update dieser Bibliothek auch die Lösung sein. So könnte es ein Abhängigkeits-Jar-Versionierungsproblem sein.

    Ich bekam das gleiche Problem. Aber dann habe ich die aktuelle Struktur der Anwendung überprüft.Ich habe festgestellt, dass ältere Anwendungsstruktur (ich weiß nicht, die Zeit, die es von Android-Framework-Entwickler geändert wird) hat einen Ordnernamen "lib" die jetzt "libs" . Ich migriere meine alle JAR-Dateien in "libs" und der Fehler ist weg. Ich hoffe das kann jemandem helfen πŸ™‚

    Versuchen Sie, Ihr Manifest so etwas zu machen.

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="zvjezdan.veselinovic.yahtzee_" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".YahtzeeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name = ".Scoring_Page" /> </application> </manifest> 

    Der Grund dafür ist:
    public class EasterSimonSaysActivity extends SimonSaysActivity {

    Verwendet eine andere Aktivität. Also, wenn Sie 2 Aktivitäten haben, dann müssen Sie beide hinzufügen. Zugegeben, dass du sie importiert hast, aber dein Manifest muss das auch wissen. Dies ist, wie ich "wechselte Seiten" für mein yahtzee Projekt. Was ich noch brauche. = /

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