java - Android:NoClassDefFoundError 仅适用于发布版本

标签 java android android-studio

我正在使用 Android Studio 并尝试在 Release模式下构建我的项目。
在 Debug模式下一切正常,但在 Release模式下出现以下错误...

08-26 17:59:05.599  31696-31931/? W/System.err﹕ java.lang.NoClassDefFoundError: a.a.b.l
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at java.lang.Class.classForName(Native Method)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at java.lang.Class.forName(Class.java:308)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at java.lang.Class.forName(Class.java:272)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at com.a.a.a.a(Unknown Source)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at com.a.a.a.a(Unknown Source)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at com.a.a.e.b(Unknown Source)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at com.a.a.e.a(Unknown Source)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at com.a.e.a.uncaughtException(Unknown Source)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
08-26 17:59:05.600  31696-31931/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    Process: com.soonoo.mobilecampus, PID: 31696
    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 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:818)
     Caused by: java.lang.ExceptionInInitializerError
            at a.a.b.l.a(Unknown Source)
            at a.a.b.m.<clinit>(Unknown Source)
            at a.a.b.f.<init>(Unknown Source)
            at a.a.b.e.<init>(Unknown Source)
            at a.a.c.di.b(Unknown Source)
            at a.a.c.di.a(Unknown Source)
            at a.a.c.b.a(Unknown Source)
            at a.a.c.ae.b(Unknown Source)
            at a.a.a.a(Unknown Source)
            at com.soonoo.mobilecampus.mainlist.h.a(Unknown Source)
            at com.soonoo.mobilecampus.mainlist.h.doInBackground(Unknown Source)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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:818)
     Caused by: java.lang.NullPointerException: in == null
            at java.util.Properties.load(Properties.java:246)
            at a.a.b.l.d(Unknown Source)
            at a.a.b.l.<clinit>(Unknown Source)
            at a.a.b.l.a(Unknown Source)
            at a.a.b.m.<clinit>(Unknown Source)
            at a.a.b.f.<init>(Unknown Source)
            at a.a.b.e.<init>(Unknown Source)
            at a.a.c.di.b(Unknown Source)
            at a.a.c.di.a(Unknown Source)
            at a.a.c.b.a(Unknown Source)
            at a.a.c.ae.b(Unknown Source)
            at a.a.a.a(Unknown Source)
            at com.soonoo.mobilecampus.mainlist.h.a(Unknown Source)
            at com.soonoo.mobilecampus.mainlist.h.doInBackground(Unknown Source)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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:818)

问题是异常消息不显示类名,发生错误的方法。
我在项目中使用的所有第三方库都在 build.gradle 中指定。
我怎样才能解决这个问题?

最佳答案

问题基本上是这样的:

buildTypes {
        release {
            **minifyEnabled false**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

如果您将 minifyEnabled 设置为 false,它应该可以解决您的问题。如果你想使用缩小功能,那么你可以将 progaurd 规则添加到你的 build.gradle 中。例如,对于 Butterknife 库,您必须添加以下内容:

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

很高兴我能帮上忙

关于java - Android:NoClassDefFoundError 仅适用于发布版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222480/

相关文章:

java - 如何在java中的inputStream之前检测文本文件的编码?

java - 使用 Android 进行音频流转码

android - layout_gravity ="top"和 android :layout_alignParentTop ="true"? 有什么不同

android - Gradle Build 在 Android Studio 中运行时间过长

Netbeans 中的 Java 应用程序与 Java 桌面应用程序

java.lang.NoClassDefFoundError : org. jgroups.-$$Lambda$CbeKW6_ggTAEDuiYP5MNn0HcZP8

javascript - 两个串行 webkit 转换在某些 Android 设备上不起作用

Android动态加载ListView

android - 有人可以为 Google Drive REST API v3 提供最新的 Android 指南吗?

android - 在Android Studio中安装哪些SDK平台工具?