[英]Android: NoClassDefFoundError only on release build
我在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 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,它應該可以解決您的問題。 如果你想使用 minify 功能,那么你可以在 build.gradle 中添加 progaurd 規則。 例如,對於 Butterknife 庫,您必須添加以下內容:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
很高興我能幫助你
在我的情況下,它適用於所有數據庫表,除了在 UI 導航中作為參數專門傳遞的表因此,如果您使用帶有可序列化參數類型的UI 導航作為 roomdb 表之一,請確保您沒有提到類名它在 XML 文件中(因為這將在發布 DEX/縮小過程中更改。)
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>
<argument ..... /> 行作為修復被刪除。
bundle!!.getSerializable("questionObj") as Question?
應該用於傳遞
錯誤很有幫助且准確
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.