2015-12-17 2 views
2

Я получаю эту ошибку:java.lang.NoClassDefFoundError на Android 4.4.4, работает на 5.0+

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)  

, но я знаю, что упомянутый класс является зависимость. Я сам просмотрел файл jar. Кроме того, я получаю только эту ошибку ниже 5.0.

Мой Gradle файл включает в себя compile 'com.google.code.gson:gson:2.5'

ответ

0

Эта вещь случается много. Вы должны быть в состоянии исправить, выполнив следующие действия,

multiDexEnabled = false 

в файле build.gradle.

Если у вас уже есть multiDexEnabled = true, то измените его на false или добавьте эту новую строку.

+0

В чем причина такого поведения? – thedarkpassenger

1

NoClassDefFoundError in Java comes when Java Virtual Machine is not able to find a particular class at runtime which was available during compile time. For example, if we have a method call from a class or accessing any static member of a Class and that class is not available during run-time then JVM will throw NoClassDefFoundError.

Вы можете попробовать с

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

Затем Изменить ваше приложение Gradle построить конфигурацию файла, чтобы включить библиотеку поддержки и включить 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' 
} 

Подробнее

DexIndexOverflowException Only When Running Tests

0

Использование компиляции 'com.android.support:multidex:1.0.0', затем расширяет MultiDexApplication в своем классе приложений.

+1

Добавьте пример кода и дополнительную ссылку, где можно найти более подробную информацию. Это поможет другим пользователям прочитать его. –

Смежные вопросы