首页 文章

Kotlin构建时不会发生Android API版本检查[重复]

提问于
浏览
3

这个问题在这里已有答案:

如何让Kotlin在编码时给出API级错误,而不是在运行时 .

App Gradle文件:

minSdkVersion 19
targetSdkVersion 26

Kotlin代码:

//initialisation
var data = getSomedata() //the returned type is Map<String, String>
data.getOrDefault("SomeKey","DefaultValue")

问题:

代码编译很好,也能够创建签名的APK . 但是当在具有API 22(Android 5)的设备上执行APK时,会抛出错误 .

致命异常:java.lang.NoSuchMethodError

预期的行为:

如果我在java文件中调用该函数,lint检查甚至会在编译之前给出以下错误 .

调用需要API级别24(当前最小值为19):java.util.Map#getOrDefault

CHECKED DUPLICATE

已经检查this question . 它为我已经衍生出的行为提供了理由 . 我需要解决方案或解决 . 截至目前,我不确定哪些方法在运行时不起作用,用户将报告IDE或编译器应报告的那些错误 .

1 回答

  • 3

    很可能这将由Android Studio / Kotlin团队完成 .

    方法 kotlin.Map.getOrDefault() 理论上对任何Android API都有效,但其内部实现(委托调用 java.util.HashMap.getOrDefault() )仅在JDK 1.8上有效 .

    此外,其文档中的方法 kotlin.Map.getOrDefault() 标记为 @since JDK 1.8 . 我想我们需要等待一段时间让IDE团队为docs中标记的方法实施警告 @since XXX

    您还可以对Kotlin的YouTrack上的问题进行投票或评论

    https://youtrack.jetbrains.com/issue/KT-20358

    https://youtrack.jetbrains.com/issue/KT-21503

相关问题