应用代码
当我们在Android应用程序中使用一些在最小版本SDK中不存在的代码时,Android Studio将显示有关它的错误。
示例:
假设我的应用有目标 SDK 26 和最小 SDK 21,并且我的代码尝试调用Objects.isNull(var);
:然后我们得到一个很好的错误消息:
Call requires API level 24 (current min is 21): java.util.Objects#isNull
AFAIK 这是一条 Lint 消息(不是编译器警告或错误)。
第三方代码
我们如何对第三方 Java 库进行相同的检查?
示例:
当项目依赖于lib.jar
文件并且此库内部使用Objects.isNull
时,我们不会收到任何错误/警告,并且应用程序将在旧设备上崩溃。
避免这种情况的一种方法是进行检测测试 - 但这些测试很慢,而且您永远不会有 100% 的代码覆盖率。
例如,我实际上认为ProGuard应该报告此问题。但事实并非如此。
也许是因为它使用目标Android SDKminSDK?
那么在以下两种情况下我们能做些什么呢:
- 我们必须按原样使用第三方库 我们可以分叉
- 第三方库并可以使用这个分叉:我们可以做些什么来发现/避免这些错误:例如,我们应该将其转换为 AAR 吗?
我们如何对第三方 Java 库进行相同的检查?
将源代码添加到项目中。
我们必须按原样使用第三方库
询问其开发人员库的相关minSdkVersion
是什么,然后设置您的库以匹配,或者避免在旧设备上调用他们的库。
第三方库并可以使用这个分叉:我们可以做些什么来发现/避免这些错误:例如,我们应该将其转换为 AAR 吗?
将源代码添加到项目中。或者,使用源代码创建其他一些项目。Lint 检查源代码,而不是编译的代码。如果您使用源代码创建其他项目,则需要让它编译 JAR 或 AAR 并将其提供给您的主项目。