2013-04-16 10 views
9

ho una classe che estende la classe di applicazione e, a volte nella mia console sviluppatore vedo un errore che dice ClassNotFoundExceptionclasse di applicazione si estende getta 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 

Questo è come mi dichiaro nel mio manifesto

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

ActiveStore è solo una classe che contiene un contesto di applicazione per avviare e annullare alram, quindi perché dovrei ottenere questo errore?

Aggiornamento:

ancora sto vedendo questo errore di tanto in tanto nella mia pagina degli sviluppatori, anche dopo aver messo un . fronte del nome della classe. Sembra accadere solo su un aggiornamento o una nuova installazione

+0

@blackbelt si è nella mia cartella root/default – tyczj

+1

controllare con la mia spiegazione qui http://stackoverflow.com/questions/17253178/android-cant-find-class-even-though-its-declared-in- manifest/17253947 # 17253947 e anche verificare con i problemi che ha chiesto qui. La classe di applicazione –

+0

si trova nel progetto di libreria? – user1140237

risposta

4

Probabilmente perché ti manca il punto davanti al nome della classe (che aiuta a dire a Dalvik che la classe appartiene al pacchetto della tua app)

.ActiveStore 

Ma in caso di dubbio, post sia l'intero file Manifest che il tuo .java

0

Sto anche vedendo questo problema molto e non ho alcuna spiegazione. Ho visto persone dire che può succedere DOPO un incidente. Presumibilmente, dopo un arresto anomalo, ClassLoader potrebbe trovarsi in uno stato "cattivo" e non essere in grado di caricare le classi. Fondamentalmente questo significherebbe che un bug precedente è la vera fonte di questo problema. Mi spiace essere vago, per favore aggiorna se trovi una spiegazione più precisa.

0

Se si dispone di codice che deve essere eseguito all'avvio (per esempio una BroadcastReceiver su BOOT_COMPLETED o un AppWidget), è possibile ottenere questo se l'utente ha installato la tua app su una scheda SD esterna. A questo punto la scheda SD potrebbe non essere stata ancora montata, quindi la tua classe Application non può essere caricata. È possibile risolvere questo problema impostando la modalità di installazione su internalOnly o nel caso dello BroadcastReceiver attendere la trasmissione di ACTION_MEDIA_MOUNTED. Vedi android intent for sdcard ready

+0

Non uso BOOT_COMPLETED o ho un widget App – tyczj

+0

Questi sono solo alcuni esempi di ciò che può causare questo. Può anche accadere se rimuovono la scheda SD. – keyboardr

0

Hai provato a utilizzare il nome del pacchetto completo per fare riferimento alla classe nel file manifest?

.ActiveStore 

sarebbe diventato

com.myapp.package.ActiveStore 

Per caso stai usando ProGuard o qualcosa di simile per offuscare il codice?

+0

sì ho fatto che – tyczj

+0

nome del pacchetto completo non dovrebbe contenere un punto all'inizio – Gomino

+0

@gomino corretto. Il mio errore –

0

L'ho già sperimentato in precedenza estendendo o implementando una delle classi/interfacce che non era disponibile in un particolare livello API. Non lo dice in modo corretto.

+0

Vale anche per gli inizializzatori statici ecc – nickmartens1980

1

Nel suo manifesto si dovrebbe neanche avere qualcosa di simile:

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

o come è stato detto già

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

Assicurarsi inoltre che la costruzione della classe di MyApplication è pubblico.

0

Ho visto questo quando ci sono errori di verifica per una classe diversa da cui dipende la classe in questione. Scorri indietro e controlla se ci sono errori di verifica nell'output del logcat completo.

Se ecm2.android.ActiveStore dipende da una classe che non riesce la verifica, si otterrà una classe non trovata per ecm2.android.ActiveStore, non per la classe ecm2.android.ActiveStore dipende da.

Problemi correlati