如何防止来自第三方库的 "Call requires API level"

How to prevent "Call requires API level" from 3rd party libraries

应用代码

当我们在 Android 应用程序中使用一些在最小版本 SDK 中不存在的代码时,Android Studio 将显示有关它的错误。

示例
假设我的应用程序具有目标 SDK 26 和最小 SDK 21,并且我的代码尝试调用 Objects.isNull(var);:然后我们收到一条很好的错误消息:

Call requires API level 24 (current min is 21): java.util.Objects#isNull

据我所知,这是 Lint 消息(不是编译器警告或错误)。

第三方代码

我们如何对第 3 方 java 库进行相同的检查?

示例
当项目依赖于 lib.jar 文件并且该库在内部使用 Objects.isNull 时,我们不会得到任何 error/warning 并且应用程序将在旧设备上崩溃。

避免这种情况的一种方法是 Instrumentation Tests - 但是这些测试很慢,而且您永远不会有 100% 的代码覆盖率。

例如我实际上认为 ProGuard 应该报告这个问题。但事实并非如此。
可能是因为它使用 target Android SDK min SDK?

那么在以下两种情况下我们可以做些什么:

  1. 我们必须按原样使用第 3 方库
  2. 我们可以分叉 3rd 方库并可以使用这个分叉:我们可以对 find/avoid 这些错误做些什么:例如我们应该将其转换为 aar 吗?

How can we have the same checks for 3rd party java libraries?

将源代码添加到您的项目。

we must use the 3rd party library as it is

询问它的开发者库的相关 minSdkVersion 是什么,然后设置你的匹配,否则避免在旧设备上调用他们的库。

we can fork the 3rd party library and can use this fork: what could we do to find/avoid these errors: e.g. should we convert it to an aar?

将源代码添加到您的项目中。或者,使用源代码创建一些其他项目。 Lint 检查源代码,而不是编译代码。如果您使用源代码创建一些其他项目,则需要让它编译一个 JAR 或 AAR 并将其提供给您的主项目。