【问题标题】:java.lang.noClassDefFoundError on Android 4.4.4, works on 5.0+Android 4.4.4 上的 java.lang.noClassDefFoundError,适用于 5.0+
【发布时间】:2015-12-17 09:05:32
【问题描述】:

我收到此错误:

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 android gradle gson


    【解决方案1】:

    Java 中的 NoClassDefFoundError 在没有 Java 虚拟机时出现 能够在运行时找到一个特定的类,该类在运行时可用 编译时间。例如,如果我们有一个类的方法调用或 访问一个类的任何静态成员并且该类不可用 在运行时,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 Only When Running Tests

    【讨论】:

      【解决方案2】:

      这种事情经常发生。您应该能够通过执行以下操作来修复,

      multiDexEnabled = false
      

      在您的 build.gradle 文件中。

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

      【讨论】:

      • 这种行为的原因是什么?
      【解决方案3】:

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

      【讨论】:

      • 添加一个代码示例和额外的参考,在哪里可以找到更多细节。阅读时会帮助其他用户。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2015-10-27
      • 2015-01-06
      • 2019-07-19
      相关资源
      最近更新 更多