В приложении Android произошел сбой из-за java.lang.NoClassDefFoundError: не удалось разрешить: [Ljava/nio/file/LinkOptiAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 В приложении Android произошел сбой из-за java.lang.NoClassDefFoundError: не удалось разрешить: [Ljava/nio/file/LinkOpti

Сообщение Anonymous »

Я получаю следующее исключение после запуска приложения с minifyEnabled true. Но если я закомментирую это, приложение откроется нормально.
Ошибка

Код: Выделить всё

AndroidRuntime             E  FATAL EXCEPTION: main
Process: my.app.android, PID: 24808
java.lang.NoClassDefFoundError: Failed resolution of: [Ljava/nio/file/LinkOption;
at af.h.(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.(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.* {
;
();
;
}
Обновление версий Firebase
Я пытался обновить Firebase до последней версии, поскольку более ранняя трассировка стека показывает строку из FirebaseInitProvider, но ошибка «Не удалось разрешить»: [Ljava/nio/file/LinkOption; все еще отображается. Он был изменен на трассировку стека, указанную выше, после того, как я обновил путь к классам "com.google.gms:google-services:4.3.14"
Desugaring
Я попробовал Desugaring с Java 11 nio на основе: https://developer.android.com/studio/wr ... port-table с использованием coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.1', но столкнулся с другой проблемой, когда FakeDependency.jar пуст. Вот ссылка на переполнение стека для этой проблемы: Android Desugaring с nio Не удалось преобразовать FakeDependency.jar для соответствия атрибутам
Но Desugaring с coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.1' прекрасно собирает проект, но все еще имеет трассировку стека LinkOption, показанную выше.
Среды
Эта проблема возникает только тогда, когда я создаю приложение и устанавливаю его на устройство Android на API уровне 23 с minifyEnabled true. Но запустить его на уровне API 33 вполне нормально.
Ниже приведена таблица различных уровней API с настройкой minifyEnabled и их статус после запуска установленного приложения.

Код: Выделить всё

| API Lvl | minifyEnabled | Status    |
| ------- | ------------- | --------- |
|      23 | true          | Crashed   |
|      23 | false         | Succeeded |
|      24 | true          | Crashed   |
|      24 | false         | Succeeded |
|      33 | true          | Succeeded |
|      33 | false         | Succeeded |
Я буду тестировать уровни API 25, 26 и 27 и обновлю таблицу выше.

Есть мысли о том, что я мог пропустить или не сделать?>

Подробнее здесь: https://stackoverflow.com/questions/763 ... olution-of
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»