Java.lang.noClassDefFoundError sur Android 4.4.4, fonctionne sur 5.0+


Je reçois cette erreur:

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) 

Mais je sais que la classe mentionnée est une dépendance. J'ai regardé le fichier jar moi-même. De plus, je n'obtiens cette erreur qu'en dessous de 5.0.

Mon fichier gradle comprend compile 'com.google.code.gson:gson:2.5'

Author: Alex White, 2015-12-17

3 answers

NoClassDefFoundError en Java vient lorsque la machine virtuelle Java n'est pas capable de trouver une classe particulière à l'exécution qui était disponible pendant moment de la compilation. Par exemple, si nous avons un appel de méthode d'une classe ou accéder à tout membre statique d'une classe et cette classe n'est pas disponible pendant l'exécution, JVM lancera NoClassDefFoundError.

Vous pouvez essayer avec

compile 'com.google.code.gson:gson:2.3'

Ensuite, Modifiez la configuration de votre fichier de génération de Gradle d'application pour inclure le support bibliothèque et activer la sortie 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'
}

Plus de détails

DexIndexOverflowException Uniquement Lors De L'Exécution De Tests

 1
Author: IntelliJ Amiya, 2017-05-23 12:04:04

Cette chose arrive beaucoup. Vous devriez être en mesure de corriger en faisant ce qui suit,

multiDexEnabled = false

Dans votre fichier build.gradle.

Si vous avez déjà multiDexEnabled = true, changez-le en false ou ajoutez cette nouvelle ligne.

 0
Author: gprathour, 2015-12-17 09:10:16

Utilisation de la compilation com.Android.support: multidex: 1.0.0 ' étend alors MultiDexApplication dans votre classe d'application.

 0
Author: Mariano D'Agostino, 2017-09-18 15:04:52