Android Activity ClassNotFoundException – alles versucht

Lesezeit: 11 Minuten

Android Activity ClassNotFoundException alles versucht
Matthäus Rathbone

Ich habe gerade eine App in eine Framework-Bibliothek und eine Anwendung umgestaltet, aber wenn ich jetzt versuche, die App im Emulator zu starten, erhalte ich den folgenden 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 Manifestdatei in irgendeiner Weise falsch ist, aber ich habe alles, was mir einfällt, doppelt überprüft.

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 korrekt 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äre für jede Hilfe dankbar. Ich habe viele ähnliche Fragen zu SO gescannt, ohne dieses spezielle Verhalten zu sehen.

Mehr Info:

  • Ich habe das generierte APK überprüft und die Klasse hat einen Eintrag in der Datei “classes.dex”.
  • Ich habe versucht, das Projekt in Eclipse zu bereinigen/zu erstellen
  • Ich habe versucht, ein völlig neues Geräte-Image zu verwenden, das noch keine Kopie des APK enthält
  • Ich habe das Bibliotheksprojekt in ein normales Java geändert und dann wieder in ein Android-Projekt geändert, kein Unterschied
  • Das Hinzufügen der abstrakten SimonSaysActivity zum Manifest macht keinen Unterschied.
  • Ich habe versucht, jede Abhängigkeit zu einem Android-Bibliotheksprojekt zu machen, und die Synchronisierung der Android-Version, die sie benötigen, hat nicht geholfen

Lösung gefunden (siehe unten). An alle, die eine Antwort / einen Kommentar gepostet haben: Ihr rockt alle, danke, dass ihr mir geholfen habt, die Probleme zu lösen!

Sieht so aus, als ob dies durch ein Upgrade der SDK-Tools eingeführt wurde. Danke an @Nick unten in den Kommentaren für diesen Link:
http://iqadd.com/item/noclassdeffounderror-adt-fix

  • Befindet sich Ihre Aktivität in der Bibliothek oder in der Anwendung?

    – Jeschurun

    2. Juni 2012 um 22:35 Uhr

  • Das steht in der Bewerbung. Es erweitert eine Basisaktivität im Bibliotheksprojekt.

    – Matthew Rathbone

    2. Juni 2012 um 22:36 Uhr

  • Baust du mit Ant oder mit ADT? Es scheint, dass Dex-Dateien keine Bibliotheksklassen enthalten.

    – Tomasz Gawel

    2. Juni 2012 um 23:05 Uhr

  • Der Fehler impliziert, dass Ihr Aktivitätsort com.matthewrathbone.eastersays.com.matthewrathbone.eastersays.EasterSimonSaysActivity ist – eindeutig nicht richtig. Versuchen Sie, dem Projektpaket eine Paketebene hinzuzufügen, die nicht in der Bibliothek vorhanden ist, z. B. …eastersays.myapp.EasterSimonSaysActivity, und geben Sie com.matthewrathbone.eastersays.myapp als Paket im Manifest an. Fügen Sie der Bibliothek jedoch nicht die Ebene „myapp“ hinzu, um den Projektpfad im Manifest vom Pfad des Bibliotheksframeworks zu unterscheiden.

    – onosendai

    2. Juni 2012 um 23:11 Uhr


  • iqadd.com/item/noclassdeffounderror-adt-fix :Link defekt :/

    – Nischant.

    21. September 2015 um 18:57 Uhr

Android Activity ClassNotFoundException alles versucht
yorkw

Ich habe einige Zeit damit verbracht, mit meinem eigenen Projekt zu spielen, und ich kann Ihr Problem replizieren und beim Versuch, mein Hauptprojekt auszuführen, genau denselben Ausnahme-Stack-Trace erhalten, also denke ich, dass dies die Ursache sein könnte:

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

Der falsche Weg:

Hauptprojekt rechtsklicken, auswählen Properties -> Java Build Path -> Projects -> Add..., fügt dies das Android-Bibliotheksprojekt als Abhängigkeitsprojekt im Build-Pfad des Android-Hauptprojekts hinzu, dies funktioniert nicht. Wenn alle erforderlichen Android-bezogenen Ressourcen im Hauptprojekt definiert sind, erhalten Sie zur Kompilierzeit keinen Fehler, aber wenn Sie die Anwendung ausführen, erhalten Sie die in der Frage beschriebene Ausnahme.

Der richtige Weg:

Hauptprojekt rechtsklicken, auswählen Properties -> Android, fügen Sie hier im Abschnitt Bibliothek Ihr Android-Bibliotheksprojekt hinzu. Sehen Sie sich den offiziellen Entwicklerleitfaden an Referenzieren eines Bibliotheksprojekts. Dies sollte alle Ihre Probleme beheben. Beachten Sie auch, dass Sie den relativen Pfad verwenden müssen, um auf das eigentliche Android-Bibliotheksprojekt zu verweisen, wie in der angegeben Bibliotheksprojekt – Überlegungen zur Entwicklung.

Hoffe das hilft.

  • Du mein Freund bist ein Genie. Das Interessante daran ist, dass ich immer eine Bibliothek „falsch“ eingebunden habe, und es hat funktioniert. Als ich also in zwei Bibliotheken umgestaltete, dachte ich, ich hätte es anders gemacht. Sie haben mir gerade Stunden über Stunden Arbeit erspart.

    – Matthew Rathbone

    10. Juni 2012 um 0:10 Uhr


  • Das Lustige ist, es hat vorher funktioniert, ich denke, ein Upgrade meiner SDK-Tools hat das Verhalten geändert. Es war sehr nicht offensichtlich.

    – Matthew Rathbone

    10. Juni 2012 um 0:23 Uhr

  • Ja, die Aktualisierung der SDK-Tools auf >ADT 17 führt zu diesem Fehler aufgrund einer Änderung in der Art und Weise, wie die aktuelle ADT-Version mit Bibliotheken umgeht. Kasse: iqadd.com/item/noclassdeffounderror-adt-fix

    – Nick

    12. Juni 2012 um 12:57 Uhr

  • Die Aktualisierung auf ADT 22 führte zu einem ähnlichen Problem: stackoverflow.com/questions/16596969/…

    – Nils

    24. Mai 2013 um 7:43 Uhr


  • Kann mir bitte jemand sagen wo ich die finde Properties? Ich kann es anscheinend nirgends finden.

    – lebhaft

    6. April 2017 um 8:56 Uhr

Ich habe den Code getestet, den Sie gegeben haben, und es funktioniert gut. Versuchen Sie, “erweitert SimonSaysActivity” einfach in “erweitert Aktivität” zu ändern, und überzeugen Sie sich selbst, dass es funktioniert.

Der Grund, warum es nicht funktioniert, ist entweder, dass SimonSaysActivity Activity nicht erweitert (was ich nicht glaube, dass Sie diesen Fehler gemacht haben) oder die Reihenfolge des Erstellungspfads falsch ist.

Um zur Reihenfolge des Erstellungspfads zu gelangen, gehen Sie zu:

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

Meine Grundreihenfolge ist: Projekt src, Projekt gen, Android 4.0.3, Android-Abhängigkeiten.

Dieses Problem tritt normalerweise auf, wenn Sie Bibliotheken verwenden.

  • Du hast also recht, wenn ich Activity direkt erweitere funktioniert es. Meine Build-Reihenfolge stimmt mit Ihrer überein, daher kann ich keine Möglichkeit finden, sie auf diese Weise zu beheben. Irgendwelche anderen Ideen?

    – Matthew Rathbone

    3. Juni 2012 um 14:04 Uhr


  • das ist wirklich seltsam. versuchen Sie, die sdk&adt zu aktualisieren. Bitte teilen Sie mir auch mit, ob Ihre App mehrere Bibliotheksprojekte (oder JAR-Dateien oder beides) verwendet. Wenn ja, versuchen Sie, ein wenig mit der Reihenfolge des Erstellungspfads zu spielen (ich würde versuchen, die Bibliotheken vorher zu platzieren). außerdem habe ich noch eine frage: hast du eine klasse mit dem namen “aktivität” erstellt und diese vielleicht statt der von android erweitert?

    – Android-Entwickler

    3. Juni 2012 um 14:08 Uhr

  • Es gibt 2 Bibliotheksprojekte, das zweite (Engine) ist sowohl von simonSays als auch vom Android-Projekt abhängig. Ich habe jede Kombination von Build-Reihenfolge ausprobiert und das Engine-Projekt von SimonSays exportiert. Antwort auf Ihre Frage: Ich habe nirgendwo eine Klasse namens Aktivität.

    – Matthew Rathbone

    3. Juni 2012 um 15:07 Uhr

  • der Motor ist das Herzstück. andere Projekte sollten es verwenden und nicht das Gegenteil. Nur das Projekt, das ein Android-Projekt ist (also kein Bibliotheksprojekt), sollte das Manifest haben, das die Deklaration aller Aktivitäten, Dienste usw. enthält. Das Manifest für Android-Bibliotheksprojekte hat (derzeit) nicht viele Zwecke (Weitere Informationen finden Sie hier: stackoverflow.com/a/10445630/878126 )

    – Android-Entwickler

    3. Juni 2012 um 15:18 Uhr

  • Sie müssen haben . Es ist nur so, dass die Manifestdatei sehr kurz sein kann und fast nichts enthält. Überprüfen Sie auch die Datei project.properties (in jedem der Projekte), dass ihr Ziel-SDK 15 ist, da dies derzeit die neueste Version ist. Wenn Sie möchten, können Sie mir eine PN senden, und ich werde die Projekte reparieren.

    – Android-Entwickler

    3. Juni 2012 um 16:05 Uhr

Android Activity ClassNotFoundException alles versucht
Alex Lockwood

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

Ich bin mir nicht ganz sicher, was Sie hier sagen wollen, aber die Tatsache, dass Sie hier das Wort „umgestaltet“ verwendet haben, lässt mich glauben, dass Sie das Konzept eines Bibliotheksprojekts missverstehen.


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 zur Kompilierzeit in ihre APK-Dateien aufnehmen.

Welche Bibliotheksprojekte sind nicht:

Ein Bibliotheksprojekt unterscheidet sich von einem Standard-Android-Projekt darin, dass Sie es nicht direkt zu einem einzigen kompilieren können .apk Datei und führen Sie sie auf einem Android-Gerät aus. Sie können ein Android-Projekt nicht als Bibliotheksprojekt verwenden und dann ein anderes Android-Projekt haben erweitern das Bibliotheksprojekt. So geht das nicht.


Das heißt, ich würde die Struktur Ihres Bibliotheksprojekts untersuchen und sicherstellen, dass Sie dies getan haben richtig einstellen. Es ist in Ordnung, Ihre Bibliothek zum Speichern von gemeinsam genutztem Code/Ressourcen zu verwenden, aber wenn Ihre Bibliothek versucht, sich so zu verhalten, als wäre sie eine separate .apk innerhalb des Bibliotheksprojekts selbst, dann haben Sie wahrscheinlich etwas falsch gemacht. ich glaube a ClassNotFoundException würde geworfen, wenn dies der Fall wäre. Um das Problem zu beheben, würde ich das Bibliotheksprojekt einfach von Grund auf neu erstellen, anstatt zu versuchen, das Android-Projekt in ein Bibliotheksprojekt zu konvertieren. Das verhindert, dass Sie auf winzige, lästige Fehler stoßen.

Fühlen Sie sich frei, mehr Code zu posten, wenn Sie immer noch Probleme haben. Sie sollten auch etwas mehr auf die Struktur (und den Zweck) Ihres Bibliotheksprojekts eingehen … warum Sie sich entschieden haben, eines zu verwenden, wie Sie es erstellt haben usw.

  • Ja, ich habe die einzelnen Projekte absolut korrekt behandelt, es war die Art und Weise, wie ich auf die Bibliotheksprojekte verwiesen habe, die das Problem tatsächlich verursacht hat. Danke aber für die tolle Hilfe!

    – Matthew Rathbone

    10. Juni 2012 um 0:24 Uhr

  • np… es war einen Versuch wert, haha

    – Alex Lockwood

    10. Juni 2012 um 0:25 Uhr

Für Eclipse Kepler (Mac): Control-click project -> Android Tools -> add support library

Ich hatte dieses Problem bei einem Projekt, an dem ich arbeitete, obwohl mein Fall anders war. Wenn jemand da draußen immer noch keine Lösung für sein Problem finden kann, versuchen Sie Folgendes:

Bei Eklipse:

Project properties -> Java Build Path -> Source tab

Darin finden Sie eine Liste mit allen Quellordnern, die kompiliert und jedes Mal in die generierte APK eingefügt werden müssen, um Ihr Projekt zu erstellen (und /gen). Typisch:

>MyProject/gen
>MyProject/src

Sie sollten sicher sein, dass in jedem Ihrer Quellordner (exclude /genalso nur /src in diesem Fall) den Artikel Output folder verweist auf den Standardausgabeordner, der ist MyProject/bin/classes. Tun Sie dies, indem Sie Ausgabeordner auswählen und auf der rechten Schaltflächengruppe auf Entfernen klicken (dadurch wird auf den Standardordner verwiesen).

Wenn Sie den Unterpunkt Ausgabeordner nicht sehen können, aktivieren Sie direkt unter der Liste “Ausgabeordner für Quellordner zulassen”.

1646092036 523 Android Activity ClassNotFoundException alles versucht
Corona

Wenn Sie alle Hinweise befolgt haben (die privaten Bibliotheken überprüft usw.) und den Fehler immer noch haben. Überprüfen Sie Ihr Manifest auf diese Codezeile im Anwendungs-Tag

    android:hasCode="false" 

Entferne es und sei glücklich. (war ich endlich) 🙂

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 nicht im Klassenpfad findet.

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

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

Umgang mit der ClassNotFoundException

  1. Stellen Sie sicher, dass der Name der angeforderten Klasse korrekt ist und dass die
    entsprechende .jar Datei existiert in Ihrer Klassenpfad. Wenn nicht, müssen Sie es explizit zum Klassenpfad Ihrer Anwendung hinzufügen.
  2. Falls die angegebene JAR-Datei in Ihrem Klassenpfad vorhanden ist, wird der Klassenpfad Ihrer Anwendung überschrieben und Sie müssen den genauen Klassenpfad finden, der von Ihrer Anwendung verwendet wird.
  3. Falls die Ausnahme durch eine Klasse eines Drittanbieters verursacht wird, müssen Sie die Klasse identifizieren, die die Ausnahme auslöst, und dann die fehlende Klasse hinzufügen .Krug Dateien in Ihrer Klassenpfad.

894020cookie-checkAndroid Activity ClassNotFoundException – alles versucht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy