【问题标题】:Android Studio minSdkVersion check for Java 1.8 (API level 24) specific featuresAndroid Studio minSdkVersion 检查 Java 1.8(API 级别 24)特定功能
【发布时间】:2018-03-15 12:44:03
【问题描述】:

我的项目使用需要 API 级别 24 (Android 7.0) 的 Array#sort

_tmp.sort((left, right) -> { ... };

但我也有minSdkVersion 21 (Android 5.0)

当我在 Android 6.0 模拟器上运行该代码时,会引发以下异常:

... Caused by: java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;)V in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /system/framework/core-libart.jar)

我发现其他用户询问过这个异常:java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;) exception in sorting arraylist android

Android Studio 的任何好方法都会警告.sort 在 Android 7.0 之前的操作系统上不可用?比如有@RequiresApi的API?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { ... }

【问题讨论】:

    标签: android java-8 nosuchmethoderror


    【解决方案1】:

    排序方法被注释为@since 1.8

    您可以在 Settings->Editor->Inspections 中更改 Android Studio 错误和警告级别

    尝试更改 Java->Java 语言级别迁移辅助工具->在她的配置中不可用的 API 用法(其描述:“此检查发现在其文档中具有 @since 标记的方法的所有用法。”)

    【讨论】:

    • 嗯。我只想使用Supported Java 8 Language Features and APIs 中介绍的Lambda 表达式。这是通过将compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 } 添加到 build.gradle 来完成的。但是,它也允许我们调用 API 级别 24 API,例如 Array#sort,而无需在 Android Studio 上进行任何 API 级别验证。
    • @kenjiuno 你找到真正看到警告的方法了吗?
    【解决方案2】:

    我计算机上的 Android 工作室开箱即用地警告我这一点,不知道为什么你的没有。也许您对 lint 警告配置进行了更改?如果没有,您应该仍然可以在那里启用它。

    【讨论】:

    • 我知道为什么...我设置了compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 }。然后警告消失了......
    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2020-03-07
    • 2019-02-06
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多