繁体   English   中英

Android 4.4.4上的java.lang.noClassDefFoundError,适用于5.0+

[英]java.lang.noClassDefFoundError on Android 4.4.4, works on 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'

当Java虚拟机无法在运行时找到编译时可用的特定类时,Java中会出现NoClassDefFoundError。 例如,如果我们从类中调用方法或访问类的任何静态成员,并且该类在运行时不可用,那么JVM将抛出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

这件事情发生了很多。 您应该能够通过执行以下操作来修复,

multiDexEnabled = false

build.gradle文件中。

如果已经有multiDexEnabled = true则将其更改为false或添加此新行。

使用compile'c​​om.android.support:multidex:1.0.0'然后在您的应用程序类中扩展MultiDexApplication。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM