当前位置: 首页 > 知识库问答 >
问题:

如何在编制索引时查找错误原因:MethodHandle。invoke和MethodHandle.invokeExact

堵昊焱
2023-03-14

我有一个项目在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,但是错误消息没有给出问题所在的线索——可能是我的代码,也可能是库。

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

共有3个答案

漆雕嘉平
2023-03-14

查看错误日志,它确实给出了更多的信息,特别指出了一个失败的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)解决了问题。

孔山
2023-03-14

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

司马自明
2023-03-14

在我的情况下,我试图在运行Api版本26或更高版本的检测测试中通过mock模拟某些内容,只要以下问题未得到解决,删除依赖项是我唯一的解决方案:https://github.com/mockk/mockk/issues/281

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

 类似资料:
  • 我正在尝试在我的Android应用中使用 SOAP 服务。我正在尝试遵循本指南。当我尝试运行我的应用程序时,我收到一个错误: 我使用的是Android N(SDK 25-我不能像错误消息所示那样跳到26),这是Android Studio刚刚创建的一个全新项目。 这是我的项目构建.gradle文件,我没有改变: 这是我的app build.gradle文件: 从日志中可以看出,导致这种情况的确切

  • 问题内容: 在关于sqlite的android vogella教程期间,我遇到了令人讨厌的问题,并出现以下错误: 我无数次地一步步修改所有文件,以正确重新创建R. class。关于此错误的非常奇怪的是,我不知道为什么在“ com.example.de.vogella.android”中有关于“ com.example”的任何内容。这是某种标准生成的名称吗?我所有的包/名称/路径都从未以“ com.

  • 编辑: 这就是我得到的:

  • 我对Android-Studio是新手,我正试图让一个“旧”应用程序重新运行。当我将Project与Gradle文件同步时,它会向我显示一条错误消息: 我还将google()和mavenCentral()添加到存储库中,但这并没有帮助。

  • 我正在迁移到elasticSearch并想找出一些问题。我将使用静态+动态映射(字段的静态类型,我将在搜索期间用于过滤,以后不会改变它们的类型)。据我所知,我可以将不同的数据放入索引中,然后对其进行更改。示例: 然后将此记录更改为: 编辑 主要目标是使用弹性而不是DB来增强性能。将有存储,我将只检索信息从它。搜索将取决于一些字段与静态映射,我不会改变他们的类型。但在将来,我可能需要添加一些字段或类

  • 我在尝试从时间戳查找数据中的值时出错。我的df有一个时间戳索引。 我的时间戳是: 我的df索引是这样的: 使用index.get_loc函数: 错误是: 我看到这个错误可能来自于数据帧的串联和索引的冲突,但这里的情况并非如此。有什么想法吗?