2012-10-02 11 views
5

Per favore qualcuno mi spieghi cosa significa questo errore e come evitarlo.NoClassDefFoundError - Rifiuta re-init su classe precedentemente fallita

Dopo un po 'la mia app Forza Chiude a causa di questo errore:

09-28 12:53:45.746 I/dalvikvm(29489): Rejecting re-init on previously-failed class Lcom/bartat/android/ui/task/AsyncTaskExt; v=0x0 
09-28 12:53:45.748 D/AndroidRuntime(29489): Shutting down VM 
09-28 12:53:45.755 I/am_crash(1146): [29489,com.bartat.android.secret,572996,java.lang.NoClassDefFoundError,com.bartat.android.ui.task.AsyncTaskExt,CommandsActivity.java,726] 
09-28 12:53:45.755 I/am_finish_activity(1146): [1079225264,123,com.bartat.android.secret/.CommandsActivity,crashed] 
09-28 12:53:45.750 W/dalvikvm(29489): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
09-28 12:53:45.752 E/AndroidRuntime(29489): FATAL EXCEPTION: main 
09-28 12:53:45.752 E/AndroidRuntime(29489): java.lang.NoClassDefFoundError: com.bartat.android.ui.task.AsyncTaskExt 

Questo problema non poteva essere risolto reinstallando l'applicazione.

Se rinominare lo AsyncTaskExt in AsyncTaskExt2 ad esempio, funziona di nuovo a lungo. Ma dopo alcune settimane/mesi ha iniziato a ottenere di nuovo questo errore.

Che cosa significa? Perché è lanciato e come evitarlo senza rinominare la classe?

Please help me, Tamás

risposta

0

Sei sicuro è questa la prima eccezione si stanno ottenendo dopo l'esecuzione l'applicazione? In passato potrebbero esserci alcune eccezioni non rilevate.

+0

Non so che causa questo errore, voglio dire ci sono errori prima che accada o no. Ma quando si verifica questa eccezione non ci sono altri errori nel registro. Immagino che il sistema (vm?) Abbia memorizzato da qualche parte che c'è stato un problema con questa classe. Ma non ho ancora avuto la prima occasione. – bartat

3

è necessario aggiungere usi-libreria nel AndroidManifest.xml

9

Questo accade quando una classe non può essere caricato per una serie di motivi. Sfortunatamente il nuovo runtime ART non registra sufficienti informazioni sulla causa di ciò. Se riesci a procurarti un vecchio dispositivo Android con Dalvik vedrai diversi log, di solito rivelando il crimine con maggiore precisione.

L'ultima volta che l'ho visto dal vivo ho dovuto gestire un file JAR che non includeva o elencava le sue dipendenze, quindi l'aggiunta della libreria dipendente corretta al file gradle l'ha risolto. Il problema maggiore è capire quali classi sono scomparse: qualcosa che registri/decompilazione/documentazione dalvik potrebbe essere in grado di dirti.

Ci sono molti altri motivi per cui le classi non possono essere caricate nella totalità del linguaggio Java, quindi questa causa specifica potrebbe non essere applicabile universalmente.

+0

Questo mi ha aiutato molto. Aggiunta di una dipendenza JAR ha risolto il problema. – Rediska

+0

L'aggiunta di una dipendenza JAR mancante ha risolto anche questo problema. Grazie! – pdsouza

2

Ho iniziato ad avere questo problema dopo aver creato un altro progetto con l'analisi di New Relic abilitata. Il demone Gradle ha quindi memorizzato nella cache l'agente New Relic e non è stato possibile avviare l'altra app.

Che ha aiutato è stato

./gradlew --stop 
6

accade per me solo se corsa istante è abilitato.

+0

grazie per aver risparmiato un sacco di tempo, evviva :) –

+0

Grazie mille. Funziona quando disabilito insta run. Ancora alcuni problemi con insta run? –