2013-04-16 14 views
9

Ich habe eine Klasse, die die Anwendungsklasse und manchmal in meiner Entwicklerkonsole erstreckt sehe ich eine Fehlermeldung, ClassNotFoundExceptionKlasse erstreckt Anwendung wirft ClassNotFoundException

java.lang.RuntimeException: Unable to instantiate application ecm2.android.ActiveStore: java.lang.ClassNotFoundException: ecm2.android.ActiveStore 
at android.app.LoadedApk.makeApplication(LoadedApk.java:501) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4221) 
at android.app.ActivityThread.access$1400(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4918) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: ecm2.android.ActiveStore 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
at android.app.Instrumentation.newApplication(Instrumentation.java:982) 
at android.app.LoadedApk.makeApplication(LoadedApk.java:496) 
... 11 more 

Dies ist, wie ich es in meinem Manifest

<application 
    android:name=".ActiveStore" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar" > 
erklären

ActiveStore ist nur eine Klasse, die einen Anwendungskontext zum Starten und Abbrechen von Alarmen enthält. Warum sollte ich diesen Fehler erhalten?

Update:

Ich bin immer noch diesen Fehler von Zeit zu Zeit in meiner Entwickler-Seite zu sehen, auch nach einem . direkt vor dem Klassennamen setzen. Es scheint nur an einem Update passieren oder neu installieren

+0

@blackbelt ja ist es in meinem root/Standardordner – tyczj

+1

Prüfung mit meiner Erklärung hier http://stackoverflow.com/questions/17253178/android-cant-find-class-even-though-its-declared-in- Manifest/17253947 # 17253947 und überprüfen Sie auch mit den Fragen, die hier gestellt. –

+0

Anwendungsklasse ist im Bibliotheksprojekt? – user1140237

Antwort

4

Wahrscheinlich, weil Sie den Punkt vor dem Klassennamen sind vermisst (die Dalvik zu sagen, hilft, dass Ihre Klasse auf das Paket Ihrer Anwendung gehört)

.ActiveStore 

Aber im Zweifel, wenn Post sowohl die ganze Manifest-Datei und Ihr .java

0

ich viel, um dieses Problem auch zu sehen bin und habe keine Erklärung. Ich habe Leute gesehen, die sagen, dass es NACH einem Unfall passieren kann. Angeblich könnte der ClassLoader nach einem Absturz in einem "schlechten" Zustand sein und keine Klassen laden können. Grundsätzlich würde dies bedeuten, dass ein früherer Fehler die eigentliche Ursache dieses Problems ist. Entschuldigung, um vage zu sein, bitte aktualisieren Sie, wenn Sie eine genauere Erklärung finden.

0

Wenn Sie Code haben, der beim Start ausgeführt werden muss (z. B. BroadcastReceiver auf BOOT_COMPLETED oder AppWidget), können Sie dies erhalten, wenn der Benutzer Ihre App auf einer externen SD-Karte installiert hat. Zu diesem Zeitpunkt ist die SD-Karte möglicherweise noch nicht geladen, daher kann Ihre Anwendungsklasse nicht geladen werden. Sie können dies lösen, indem Sie den Installationsmodus auf internalOnly setzen oder im Fall der BroadcastReceiver auf die Übertragung von ACTION_MEDIA_MOUNTED warten. Siehe android intent for sdcard ready

+0

Ich benutze nicht BOOT_COMPLETED oder habe ein App Widget – tyczj

+0

Das sind nur einige Beispiele dafür, was das verursachen kann. Es kann auch passieren, wenn sie die SD-Karte entfernen. – keyboardr

0

Haben Sie versucht, den vollständig qualifizierten Paketnamen zu verwenden, um auf Ihre Klasse in Ihrem Manifest zu verweisen?

.ActiveStore 

com.myapp.package.ActiveStore 

Durch eine Chance werden würde verwenden Sie ProGuard oder ähnliches Code zu verschleiern?

+0

ja ich habe das getan – tyczj

+0

Voll qualifizierten Paketnamen sollte keinen Punkt am Anfang – Gomino

+0

@gomino richtig enthalten. Mein Fehler –

0

Ich habe dies schon einmal erlebt, als ich eine der Klassen/Interfaces erweitert oder implementiert habe, die in einer bestimmten API-Ebene nicht verfügbar waren. Es sagt dies nicht in einer richtigen Weise.

+0

Auch für statische Initialisierer usw – nickmartens1980

1

In Ihrem Manifest sollten Sie entweder so etwas wie:

package="path.to.project.root" 
... 
<application 
    android:name=".MyApplication" 

oder wie erwähnt bereits

<application 
    android:name="path.to.project.root.MyApplication" 

Auch der Konstruktor Ihrer MyApplication Klasse stellen Sie sicher, öffentlich ist.

0

Ich habe das gesehen, wenn es Verifikationsfehler für eine andere Klasse gibt, von der die fragliche Klasse abhängt. Scrollen Sie zurück und prüfen Sie, ob in der vollständigen logcat-Ausgabe Verifikationsfehler vorliegen.

Wenn ecm2.android.ActiveStore von einer Klasse abhängt, die die Verifizierung nicht besteht, dann würden Sie eine Klasse nicht für ecm2.android.ActiveStore finden, nicht für die Klasse ecm2.android.ActiveStore.

Verwandte Themen