没有关于在 Android 项目中使用 Java 9 方法的警告

Posted

技术标签:

【中文标题】没有关于在 Android 项目中使用 Java 9 方法的警告【英文标题】:No warning about using Java 9 methods in Android projects 【发布时间】:2021-12-22 20:17:56 【问题描述】:

我在针对 SDK 31 的 android 项目中使用了 java.time.Duration.toMinutesPart() 方法,从 IDE/编译器的角度来看,一切都很好,在我的带有 Android 12 的模拟器/设备上,该应用程序工作正常,但后来我注意到我们的测试崩溃了运行较低 Android 版本的设备

Fatal Exception: java.lang.NoSuchMethodError
No virtual method toMinutesPart()I in class Lj$/time/Duration; or its super classes (declaration of 'j$.time.Duration' appears in base.apk!classes2.dex)

我检查了该方法的文档,并注意到该方法是在 Java 9 中添加的,因此崩溃是有道理的,但令我困扰的是构建管道(IDE、编译器、lint)的任何部分都没有警告我关于使用这种方法,现在我害怕我可能使用多少种方法可能会在生产中崩溃。有什么办法可以防止这种情况发生吗?我正在使用 Kotlin 和脱糖插件

【问题讨论】:

【参考方案1】:

我检查了该方法的文档,发现该方法是在 Java 9 中添加的

还有as per Android documentation,它仅在 API 级别 31 (Android S) 上可用。

可能的原因:

lint 被 Android Studio 意外抑制了:所以,从 Settings >> Editor >> Code Style >> Inspections 检查

Android Studio 上未安装 API 31 的 SDK >> 所以请务必从 SDK 管理器安装它:

使用@SuppressLint("NewApi") 从此代码块中抑制警告。

任何其他意外的 Android Studio 错误 >> 尝试 File >> Invalidate caches and restart

【讨论】:

嘿,感谢您的回答,但不幸的是,没有可能的原因适用于我的情况。我启用了检查,我已经安装了 Android 12 SDK,我没有抑制警告并且无效缓存没有帮助:( 很抱歉;你能从 Android Studio 终端运行./gradlew lint 以确保 lint 有效运行...确保从项目的根目录运行它

以上是关于没有关于在 Android 项目中使用 Java 9 方法的警告的主要内容,如果未能解决你的问题,请参考以下文章

关于Android开发中Java对于.so库的调用

关于参加工作室的预期

Ensime 用于 android 项目中的 .java 文件

提速Android Gradle 构建

关于android开发自定义view

Android简易音乐重构MVVM Java版 -搭建项目