持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
前言
今天我们来了解一下compileSdkVersion、targetSdkVersion、minSdkVersion是什么,以及兼容模式是如何工作的。我们还想谈谈推荐的设置方法。
正文
您可能已经在清单文件或 Gradle 的 android 块中看到过诸如 compileSdkVersion、targetSdkVersion、minSdkVersion 之类的属性。为什么我需要设置这个版本?
android{
compileSdk = 30
defaultConfig{
minSdk = 14
targetSdk = 30
}
}
这是因为不同的 Android 设备可能有不同的 Android 系统,不同的 Android 框架 API 级别(以下简称 API 级别)。
Android SDK 和 Android API Android SDK 意为“Android 软件开发工具包”。这意味着为 Android 开发者提供的综合礼品套装,一个用于 Android 开发的工具箱。此 Android SDK 包括 Android API、Android 开发工具、示例代码、开发文档等。也就是说,上面所说的“Android框架API层”就是属于Android SDK的Android API。
因此,开发者使用的compileSdkVersion、targetSdkVersion、minSdkVersion称为sdk,对于用户使用的设备,称为API级别。
默认情况下,Android 平台提供 Android 框架 API。此外,Android 平台也在不断发展。由于 Android 平台不断发展的特性,Android 框架 API 更新旨在确保新 API 与旧 API 版本保持兼容。
这意味着旧 API 将被移除,新 API 不会取代所有内容,这意味着新 API 和旧 API 共存并作为唯一 API 进行管理。为了表达“独特的 API”,每个 Android 框架 API 都会有一个以整数表示的 API 级别。当 Android 框架 API 更新以及 Android 平台更新时,此 API 级别将具有自己的 API 级别。
回到不得不再次设置 SdkVersion 的故事。正如我之前提到的,这是因为每个设备可能使用不同的 API 级别。一个应用程序是为多种设备构建的。这意味着一个应用程序针对多个 API 级别。但是,要构建一个针对地球上人们当前使用的所有 Android 设备的 API 级别的应用程序将非常困难,或者您将不得不使用非常旧的 API。在后一种情况下,基于 API 1 级别构建的应用程序将难以满足对不断发展的 Android 平台的期望的用户。考虑到使用每个 API 级别的设备的特性(使用 API 1 的设备可能非常非常旧),需要进行适当的过滤,并且需要选择 API 级别以利用新 API 的最新功能。因此,需要指定您正在创建的应用程序基于哪个API级别,它编译到哪个API级别,以及是否存在此应用程序无法运行的API级别。这里的显式是 compileSdkVersion、targetSdkVersion 和 minSdkVersion。
总结
- compileSdkVersion:告诉gradle当前编译的Android API级别是多少,仅影响编译时期。
- minSdkVersion和maxSdkVersion:一般情况下不设置
maxSdkVersion,主要是指定app应用的Android API级别的上限和下限,超过该限制无法安装app。 - targetSdkVersion:是 Android 系统提供前向兼容的主要手段,随着现在 Android 系统的升级,可能会从Android 10 升级到Android 11,只要
targetSdkVersion版本号还是29,就算app运行在Android 11的系统上部分调整的API依旧还是按照Android 10的API级别运行。
maxSdkVersion >= compileSdkVersion>= targetSdkVersion >= minSdkVersion