首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dexing时查找错误原因: MethodHandle.invoke和MethodHandle.invokeExact

如何在dexing时查找错误原因: MethodHandle.invoke和MethodHandle.invokeExact
EN

Stack Overflow用户
提问于 2018-06-01 06:33:56
回答 5查看 9K关注 0票数 10

我有一个项目,当在Android Studio或Gradle中构建时,它开始抛出这个错误:

代码语言:javascript
复制
com.android.tools.r8.ApiLevelException: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)

现在,我假设这与Java 8特性的使用有关,可能是lambda,但错误消息没有提供问题所在的线索-可能是我的代码,也可能是库。

找出违规代码在哪里的最佳方法是什么?这是一个相当大的应用程序,有几个模块和相当多的库。

EN

回答 5

Stack Overflow用户

发布于 2018-06-01 06:46:20

一种方法是将min api设置为26,以避免错误并构建apk,然后检查应用程序的字节码(dexdump、baksmali等)。查找MethodHandle类的任何用法。

票数 2
EN

Stack Overflow用户

发布于 2018-06-01 07:34:35

查看错误日志,它确实提供了一些更多的信息,特别是指定了一个失败的jar文件:

代码语言:javascript
复制
/Users/.../androidApp/build/intermediates/transforms/desugar/debug/41.jar

在检查该jar文件时,发现所有类都来自最近添加到项目中的库,并且列出的第一个类是:

代码语言:javascript
复制
META-INF/versions/9/org/h2/util/Bits.class

这是一个Java 9定制的类。从jar文件中删除它(使用压缩-d)解决了这个问题。

票数 2
EN

Stack Overflow用户

发布于 2020-06-05 18:04:57

只需将mockk版本更改为1.10.0,这将解决

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50633710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档