Java Android:NoClassDefFoundError仅在发布版本时发生

Java Android:NoClassDefFoundError仅在发布版本时发生,java,android,android-studio,Java,Android,Android Studio,我在安卓工作室上,试图以发布模式构建我的项目。 在调试模式下一切正常,但在发布模式下出现以下错误 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

我在安卓工作室上,试图以发布模式构建我的项目。
在调试模式下一切正常,但在发布模式下出现以下错误

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)
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﹕ 位于java.lang.Class.classForName(本机方法)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 位于java.lang.Class.forName(Class.java:308)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 位于java.lang.Class.forName(Class.java:272)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 在com.a.a.a.a(未知来源)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 在com.a.a.a.a(未知来源)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 在com.a.a.e.b(未知来源)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 在com.a.a.e.a(未知来源)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 位于com.a.e.a.uncaughtException(未知来源)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 位于java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
08-26 17:59:05.599  31696-31931/? W/System.err﹕ 位于java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
08-26 17:59:05.600  31696-31931/? E/AndroidRuntime﹕ 致命异常:异步任务#2
进程:com.soonoo.mobilecampus,PID:31696
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:300)
位于java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:222)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
原因:java.lang.ExceptionInInitializeError
在a.a.b.l.a(未知来源)
a.a.b.m.(未知来源)
在a.a.b.f.(未知来源)
在a.a.b.e.(未知来源)
在a.a.c.di.b(未知来源)
在a.a.c.di.a(未知来源)
在a.a.c.b.a(未知来源)
在a.a.c.ae.b(未知来源)
在a.a.a.a(未知来源)
位于com.soonoo.mobilecampus.mainlist.h.a(未知来源)
位于com.soonoo.mobilecampus.mainlist.h.doInBackground(未知来源)
在android.os.AsyncTask$2.call(AsyncTask.java:288)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
原因:java.lang.NullPointerException:in==null
加载(Properties.java:246)
在a.a.b.l.d(未知来源)
在a.a.b.l.(未知来源)
在a.a.b.l.a(未知来源)
a.a.b.m.(未知来源)
在a.a.b.f.(未知来源)
在a.a.b.e.(未知来源)
在a.a.c.di.b(未知来源)
在a.a.c.di.a(未知来源)
在a.a.c.b.a(未知来源)
在a.a.c.ae.b(未知来源)
在a.a.a.a(未知来源)
位于com.soonoo.mobilecampus.mainlist.h.a(未知来源)
位于com.soonoo.mobilecampus.mainlist.h.doInBackground(未知来源)
在android.os.AsyncTask$2.call(AsyncTask.java:288)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
问题在于,异常消息不显示出现错误的类和方法的名称。
我在项目中使用的所有第三方库都在
build.gradle
中指定

我怎样才能解决这个问题

问题基本上如下所示:

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

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

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

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

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
-保留类butterknife.*{*;}
-dontwarn butterknife,内部**
-保持类**$$ViewBinder{*;}
-KeepClassSwithMemberNames类*{
@黄油刀*;
}
-KeepClassSwithMemberNames类*{
@黄油刀*;
}

很高兴我能帮上忙

在我的例子中,它适用于所有数据库表,除了一个,它在UI导航中专门作为参数传递 因此,如果将用户界面导航可序列化参数类型一起用作roomdb表的一个,请确保在XML文件中没有提到它的类名(因为这将在发布索引/缩小过程中更改)

XML文件:Navigation.XML包含

<navigation>
        <fragment> 
            <argument android:name="questionObj" app:argType="roomdb.db.question" /> // removed for Fixing
            <action
            android:id="@+id/action_q1_to_q2">
        </fragment> 
    </navigation>
应该用来传球

错误是有帮助和准确的

W/System.err: Caused by: java.lang.RuntimeException: Exception inflating navigation/navigation line 83
W/System.err: Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: database.db.Question
W/System.err: Caused by: java.lang.ClassNotFoundException: database.db.Question
W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "database.db.Question" on path: DexPathList[[zip file "/data/app/appname-zu2-cBYoT7e345HeXbjQsgtpA==/base.apk"],nativeLibraryDirectories=[/data/app/appname-zu2-cBYoT7e345HeXbjQsgtpA==/lib/arm64, /system/lib64, /product/lib64]]
I/PackageManager.DexOptimizer: Running dexopt (dexoptNeeded=-3) on: /data/app/appname-zu2-cBYoT7e345HeXbjQsgtpA==/base.apk pkg=appname isa=arm64 dexoptFlags=boot_complete,profile_guided,enable_hidden_api_checks targetFilter=speed-prof

此构建类型可能存在问题{release{minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard rules.pro'signingConfig signingConfigs.release}如果在build.gradle中将minifyEnabled设置为false,它应该可以工作。您使用的一些库要求您为其类声明proguard规则
W/System.err: Caused by: java.lang.RuntimeException: Exception inflating navigation/navigation line 83
W/System.err: Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: database.db.Question
W/System.err: Caused by: java.lang.ClassNotFoundException: database.db.Question
W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "database.db.Question" on path: DexPathList[[zip file "/data/app/appname-zu2-cBYoT7e345HeXbjQsgtpA==/base.apk"],nativeLibraryDirectories=[/data/app/appname-zu2-cBYoT7e345HeXbjQsgtpA==/lib/arm64, /system/lib64, /product/lib64]]
I/PackageManager.DexOptimizer: Running dexopt (dexoptNeeded=-3) on: /data/app/appname-zu2-cBYoT7e345HeXbjQsgtpA==/base.apk pkg=appname isa=arm64 dexoptFlags=boot_complete,profile_guided,enable_hidden_api_checks targetFilter=speed-prof