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

Cly*_*yde 10 lambda android dex java-8

我有一个在 Android Studio 或 Gradle 中构建时开始抛出此错误的项目:

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

现在我假设它与 Java 8 特性的使用有关,可能是一个 lambda,但错误消息没有给出问题所在的线索——它可能是我的代码,也可能是一个库。

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

Hat*_*zen 5

在我的情况下,我尝试在运行 Api 版本 26 或更高版本的仪器测试中通过 mockk 模拟某些东西,只要以下问题没有解决,删除依赖是我唯一的解决方案:https : //github.com/mockk/mockk/issues /281


更新:问题似乎已解决,使用 mockk 1.10.0 版将解决此问题


Jes*_*eke 2

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