如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion

首先看谷歌官方文档对targetsdkversion的定义:

3.jpg

如果targetsdkversion设置为23,那么系统认为23版本所有功能的特性您已经经过充分的测试,只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性。如果没有设置这个属性,应用就会出现问题,不确保兼容性;

4.jpg

android:compileSdkVersion
compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。
需要强调的是修改 compileSdkVersion 不会改变运行时的行为。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用。(你真的应该修复这些警告,他们的出现一定是有原因的)

因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。

注意,如果使用 Support Library,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本号要一致!)。通常,新版的 Support Library 随着新的系统版本而发布,它为系统新增加的 API 和新特性提供兼容性支持。

android:minSdkVersion
一个用于指定应用运行所需最低 API 级别的整数。 如果系统的 API 级别低于该属性中指定的值,Android 系统将阻止用户安装应用。 您应该始终声明该属性。
注意:如果您不声明该属性,系统将假定默认值为“1”,这表示您的应用兼容所有 Android 版本。 如果您的应用并不兼容所有版本(例如,它使用 API 级别 3 中引入的 API),并且您尚未声明正确的 minSdkVersion,则当应用安装在 API 级别小于 3 的系统上时,应用将在运行时尝试访问不可用的 API 时发生崩溃。 因此,请务必在 minSdkVersion 属性中声明合适的 API 级别。

android:targetSdkVersion
三个版本号中最有趣的就是 targetSdkVersion 了。 targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。这允许你在适应新的行为变化之前就可以使用新的 API (因为你已经更新了 compileSdkVersion 不是吗?)。

由于某些行为的变化对用户是非常明显的,所以将 target 更新为最新的 SDK 是所有应用都应该优先处理的事情。但这不意味着你一定要使用所有新引入的功能,也不意味着你可以不做任何测试就盲目地更新 targetSdkVersion ,请一定在更新 targetSdkVersion 之前做测试!你的用户会感谢你的。

如果你按照上面示例那样配置,你会发现这三个值的关系是:
minSdkVersion <= targetSdkVersion <= compileSdkVersion

这种直觉是合理的,如果 compileSdkVersion 是你的最大值,minSdkVersion 是最小值,那么最大值必需至少和最小值一样大且 target 必需在二者之间。

理想上,在稳定状态下三者的关系应该更像这样:
minSdkVersion (lowest possible) <=
targetSdkVersion == compileSdkVersion (latest SDK)
用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。

感谢谷歌官方文档的详细说明~

你可能感兴趣的:(如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion)