没有关于在 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 方法的警告的主要内容,如果未能解决你的问题,请参考以下文章