Java NoSuchMethodError:Android的MethodHandle中没有虚拟方法调用

Java NoSuchMethodError:Android的MethodHandle中没有虚拟方法调用,java,android,methodhandle,Java,Android,Methodhandle,我正在尝试在Android上使用方法句柄,用于一个项目。目前,我正在将一些现有的Java代码转换为与Android兼容,但我遇到了一个问题 在纯Java 7/8中,以下代码编译并打印“Jim”: Android也会编译相同的代码,但在运行时会引发异常: java.lang.NoSuchMethodError: No virtual method invoke(Ljava/lang/Object;I)Ljava/lang/Object; in class Ljava/lang/invoke/Met

我正在尝试在Android上使用
方法句柄
,用于一个项目。目前,我正在将一些现有的Java代码转换为与Android兼容,但我遇到了一个问题

在纯Java 7/8中,以下代码编译并打印“Jim”:

Android也会编译相同的代码,但在运行时会引发异常:

java.lang.NoSuchMethodError: No virtual method invoke(Ljava/lang/Object;I)Ljava/lang/Object; in class Ljava/lang/invoke/MethodHandle; or its super classes (declaration of 'java.lang.invoke.MethodHandle' appears in /system/framework/core-oj.jar)
存在并使用varargs功能传递任意数量的
对象
参数,但在运行时,它会尝试查找参数类型为
对象
int
的arity 2方法

我尝试用数组参数替换
invoke
调用:
arrayReader.invoke(新对象[]{array,2})
,但这只会产生另一个问题:

java.lang.UnsupportedOperationException: MethodHandle.invoke cannot be invoked reflectively.
无论如何,我都没想到这会起作用,因为由
MethodHandles.arrayElementGetter
调用生成的
MethodHandle
需要两个参数(数组和索引),但我认为值得一试

我正在运行一个API级别为26的Android仿真器。这是
build.gradle
文件的一部分:

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 26
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
...

有没有办法解决这个问题,或者有其他方法可以达到同样的效果?

我解决了自己的问题:

我将Android studio升级到版本3,并将所有必需的插件版本(如构建工具、Gradle)升级到版本4,这解决了问题。阅读这篇文章促使我升级:pnfsoftware.com/blog/…(虽然没有特别提到将Android studio升级到此版本)。

我解决了自己的问题:

我将Android studio升级到版本3,并将所有必需的插件版本(如构建工具、Gradle)升级到版本4,这解决了问题。阅读这篇文章促使我升级:pnfsoftware.com/blog/…(虽然没有特别提到将Android studio升级到此版本)。

MethodHandle是在API level 26中添加的,可能是因为它?因为MethodHandle需要API level 26,所以您需要运行Android 8.0的设备(或模拟器)。您应该将清单中的
minSdkVersion
设置为26。很抱歉,我反复对自己说“记得提到您正在运行API级别为26的仿真器”,但我还是忘记了。我现在就编辑我的帖子。我将Android studio升级到3版,并将所有必需的插件版本,例如构建工具,Gradle升级到4版,这就解决了这个问题。阅读这篇文章促使我升级:(虽然没有特别提到将Android studio升级到此版本)。MethodHandle是在API级别26中添加的,可能是因为它?因为MethodHandle需要API级别26,所以您需要一个运行安卓8.0的设备(或模拟器)。您应该将清单中的
minSdkVersion
设置为26。很抱歉,我反复对自己说“记得提到您正在运行API级别为26的仿真器”,但我还是忘记了。我现在就编辑我的帖子。我将Android studio升级到3版,并将所有必需的插件版本,例如构建工具,Gradle升级到4版,这就解决了这个问题。阅读这篇文章促使我升级:(虽然没有特别提到将Android studio升级到这个版本)。
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 26
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
...