Как найти причину ошибки при dexing: MethodHandle.invoke и MethodHandle.invokeExact - PullRequest
0 голосов
/ 01 июня 2018

У меня есть проект, который начал выдавать эту ошибку при сборке в Android Studio или Gradle:

com.android.tools.r8.ApiLevelException: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)

Теперь я предполагаю, что это связано с использованием функций Java 8, возможно, лямбда, но ошибкасообщение не дает подсказки о том, в чем заключается проблема - это может быть мой код или библиотека.

Каков наилучший способ узнать, где находится код, вызывающий нарушение?Это достаточно большое приложение с несколькими модулями и несколькими библиотеками.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Просматривая журнал ошибок, он дал немного больше информации, в частности, указывал один файл JAR, на котором произошел сбой:

/Users/.../androidApp/build/intermediates/transforms/desugar/debug/41.jar

При проверке этого файла JAR все классы недавно были из библиотеки.добавлен в проект, и самый первый класс в списке был:

META-INF/versions/9/org/h2/util/Bits.class

Это оказывается настроенный класс Java 9.Удаление его из файла jar (с помощью zip -d) решило проблему.

0 голосов
/ 01 июня 2018

Один из подходов состоит в том, чтобы установить минимальное значение api равным 26, чтобы избежать ошибки и создать apk, а затем проверить байт-код приложения (dexdump, baksmali и т. Д.), Чтобы найти любые применения класса MethodHandle.

...