Java.lang.noClassDefFoundError su Android 4.4.4, funziona su 5.0+
Sto ricevendo questo errore:
12-17 03:59:18.767 7516-8610/io.ustube.ustube E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: io.ustube.ustube, PID: 7516
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NoClassDefFoundError: com.google.gson.internal.$Gson$Preconditions
at com.google.gson.reflect.TypeToken.<init>(TypeToken.java:72)
at com.google.gson.reflect.TypeToken.get(TypeToken.java:296)
at com.google.gson.Gson.toJson(Gson.java:644)
at com.google.gson.Gson.toJson(Gson.java:631)
at com.google.gson.Gson.toJson(Gson.java:586)
at com.google.gson.Gson.toJson(Gson.java:566)
at io.ustube.ustube.LoginActivity$VerifyTask.doInBackground(LoginActivity.java:338)
at io.ustube.ustube.LoginActivity$VerifyTask.doInBackground(LoginActivity.java:310)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Ma so che la classe menzionata è una dipendenza. Ho controllato io stesso il file del barattolo. Inoltre, ottengo solo questo errore sotto 5.0.
Il mio file gradle include compile 'com.google.code.gson:gson:2.5'
3 answers
NoClassDefFoundError in Java arriva quando Java Virtual Machine non lo è in grado di trovare una particolare classe in fase di esecuzione che era disponibile durante tempo di compilazione. Ad esempio, se abbiamo una chiamata di metodo da una classe o l'accesso a qualsiasi membro statico di una classe e quella classe non è disponibile durante il runtime, JVM lancerà NoClassDefFoundError.
Puoi provare con
compile 'com.google.code.gson:gson:2.3'
Quindi, Modifica la configurazione del file di compilazione Gradle dell'app per includere il supporto libreria e abilitare l'uscita multidex .
android {
compileSdkVersion 21 // Set Yours
buildToolsVersion "21.1.0" // Set Yours
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21 // Set Yours
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
Maggiori dettagli
Questa cosa succede molto. Dovresti essere in grado di correggere facendo quanto segue,
multiDexEnabled = false
Nel tuo file build.gradle
.
Se hai già multiDexEnabled = true
, modificalo in false
o aggiungi questa nuova riga.
Usa compile ' com.Android.supporto: multidex: 1.0.0 ' quindi estende MultiDexApplication nella classe di applicazione.