脱糖 - Java 8 Stream API 和 Proguard 在发布版本中崩溃

Desugaring - Java 8 Stream API with Proguard crash in release version

提问人:Bitwise DEVS 提问时间:5/23/2021 更新时间:11/23/2022 访问量:860

问:

该应用程序仅在其发布版本中崩溃,并对 Android 的 Java 8 进行脱糖。

compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }


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

这是我们尝试过但没有奏效的。

-keep class java.util.stream.** { *; }

示例代码只是使用过滤器

List<MovieModel> = someList.stream().filter(it -> !it.getImdbId().equalsIgnoreCase(model.getImdbId())).collect(Collectors.toList())

错误:

java.lang.ClassCastException: j$.util.stream.p cannot be cast to j$.wrappers.p
Android java-8 java-stream proguard JDK-脱糖

评论

0赞 Naman 5/23/2021
是什么类型?以及如何声明?someListmodel
0赞 Bitwise DEVS 5/24/2021
@Naman来自 Intent 的相同类型。我也试图将模型保留在 proguard 中,但它不起作用,显然问题不在于 POJO。List<MovieModel>
1赞 Roberto 6/18/2021
应该在这个错误中修复 issuetracker.google.com/issues/189264383 但尚未正式发布
1赞 Misagh Emamverdi 12/28/2021
@BitwiseDEVS,我也有同样的问题。你找到解决方案了吗?我正在使用 AGP 7.0.4,但它不起作用。

答:

1赞 taotao 11/23/2022 #1

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'

tools:desugar_jdk_libs应升级到 1.1.5 或 heigher。

https://developer.android.com/studio/write/java8-support.html