Android Stream.toList() 在 APK 中不起作用,但在直接从 Android Studio 安装应用程序时起作用

问题描述 投票:0回答:1

我正在使用此代码

var subList = mainList.stream()
            .flatMap(mainListItem ->
                    getSubItems(mainListItem.subItems).stream())
            .toList()

当我直接从 Android Studio 安装应用程序后运行此代码时,它工作正常,而当我在安装 APK 后运行此代码时, toList() 调用失败并出现错误:

Caused by: java.lang.NoSuchMethodError: No interface method toList()Ljava/util/List; in class Lj$/util/stream/Stream; or its super classes (declaration of 'j$.util.stream.Stream' appears in /data/app/~~O_6UL0ys4sQP9iQ4qmUjjQ==/com.package.name-PBAatiCc4N4NNAIsUiGUfg==/base.apk!classes19.dex)

我在代码中启用了脱糖功能,并且正在使用正确的配置:

compileOptions {
    coreLibraryDesugaringEnabled true

    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_11.toString()
}

使用的脱糖库版本是

1.1.5

coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5"

我已尝试禁用

minifyEnabled
shrinkResources
但无济于事。

java android kotlin android-studio mobile
1个回答
0
投票

纠结了一段时间后,我意识到问题确实出在我使用的

Stream
API 上。原来是在
Stream.toList()
里加了
Java 16
。我使用的 Gradle JDK 版本是
Java 17
,因此编译了代码。 Android Studio 建议
toList()
为红色,但代码编译和运行没有问题,除非我通过 APK 安装应用程序。

我用

Stream.toList()
替换了所有
Stream.collect(Collectors.toList())
调用,并且没有任何问题。

搜索完开发人员文档和脱糖发行说明后,发现我正在使用的库版本不支持

Stream.toList()
,因为在支持的 API 列表中没有提到它。

© www.soinside.com 2019 - 2024. All rights reserved.