我有一个项目,当在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特性的使用有关,可能是lambda,但错误消息没有提供问题所在的线索-可能是我的代码,也可能是库。
找出违规代码在哪里的最佳方法是什么?这是一个相当大的应用程序,有几个模块和相当多的库。
发布于 2018-06-01 06:46:20
一种方法是将min api设置为26,以避免错误并构建apk,然后检查应用程序的字节码(dexdump、baksmali等)。查找MethodHandle类的任何用法。
发布于 2018-06-01 07:34:35
查看错误日志,它确实提供了一些更多的信息,特别是指定了一个失败的jar文件:
/Users/.../androidApp/build/intermediates/transforms/desugar/debug/41.jar在检查该jar文件时,发现所有类都来自最近添加到项目中的库,并且列出的第一个类是:
META-INF/versions/9/org/h2/util/Bits.class这是一个Java 9定制的类。从jar文件中删除它(使用压缩-d)解决了这个问题。
发布于 2020-06-05 18:04:57
只需将mockk版本更改为1.10.0,这将解决
https://stackoverflow.com/questions/50633710
复制相似问题