开启minifyEnabled后Android低版本崩溃:NoClassDefFoundError(LinkOption)
问题:开启
minifyEnabled true后Android应用在低API版本崩溃 开启minifyEnabled true运行Android应用时出现崩溃异常;注释该配置后应用可正常启动。
错误信息
AndroidRuntime E FATAL EXCEPTION: main Process: my.app.android, PID: 24808 java.lang.NoClassDefFoundError: Failed resolution of: [Ljava/nio/file/LinkOption; at af.h.<clinit>(JavaFlexibleTypeDeserializer.kt:18) at pl.h.onCreate(MyApp.java:302) at my.app.android.MyBaseApp.onCreate(MyBaseApp.kt:1) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.ClassNotFoundException: Didn't find class "java.nio.file.LinkOption" on path: DexPathList[[zip file "/data/app/my.app.android-2/base.apk"],nativeLibraryDirectories=[/data/app/my.app.android-2/lib/x86, /data/app/my.app.android-2/base.apk!/lib/x86, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at af.h.<clinit>(JavaFlexibleTypeDeserializer.kt:18) at pl.h.onCreate(MyApp.java:302) at my.app.android.MyBaseApp.onCreate(MyBaseApp.kt:1) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Suppressed: java.lang.ClassNotFoundException: java.nio.file.LinkOption at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 14 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
已尝试的排查方案
- ProGuard保留类:已在ProGuard文件中添加以下规则,但无效:
-keep class java.nio.file.** { *; } -keep class java.nio.file.LinkOption { *; } -keepclassmembers class java.nio.file.* { <fields>; <init>(); <methods>; } - 升级Firebase版本:因早期栈信息涉及
FirebaseInitProvider,已升级至最新版本并更新classpath "com.google.gms:google-services:4.3.14",但错误仍存在。 - Desugaring处理:尝试
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.1'时出现FakeDependency.jar为空问题;改用com.android.tools:desugar_jdk_libs:2.0.1可构建但崩溃未解决。
环境测试情况
问题仅出现在API Level 23、24设备且开启minifyEnabled true时;API Level 33设备无论配置如何均正常。测试状态:
| API Lvl | minifyEnabled | Status |
|---|---|---|
| 23 | true | Crashed |
| 23 | false | Succeeded |
| 24 | true | Crashed |
| 24 | false | Succeeded |
| 33 | true | Succeeded |
| 33 | false | Succeeded |
我将测试API25-27并更新表格,请问还有哪些遗漏或未尝试的解决方向?
内容的提问来源于stack exchange,提问作者Dhagz
相关产品推荐
相关产品推荐

