Android:NoClassDefFoundError 仅在发布版本中 [英] Android: NoClassDefFoundError only on release build
问题描述
我正在使用 Android Studio
并尝试在发布模式下构建我的项目.
在调试模式下一切正常,但在发布模式下会出现以下错误...
I'm on Android Studio
and trying to build my project on release mode.
Everything is OK in debug mode however below errors occur in release mode...
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
中指定.
我怎样才能解决这个问题?
The problem is that exception messages do not display the name of classes, methods that occurs error.
All third party libraries I used in my project are specified in build.gradle
.
How can I fix this?
推荐答案
问题基本如下:
buildTypes {
release {
**minifyEnabled false**
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
如果您将 minifyEnabled 设置为 false,它应该可以解决您的问题.如果你想使用 minify 功能,那么你可以在 build.gradle 中添加 progaurd 规则.例如,对于 Butterknife 库,您必须添加以下内容:
If you set minifyEnabled to false, it should fix your problem. If you want to use the minify feature then you can add progaurd rules to your build.gradle. For instance for the Butterknife library you have to add the following:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
很高兴能帮上忙
这篇关于Android:NoClassDefFoundError 仅在发布版本中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!