minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析

1. minSdkVersion

minSdkVersion限制安装application所需要的系统最低版本,低于该版本的系统都不可以安装该application。同时不能使用该level版本SDK所不具备的API,例如在minSdkVersion为8的application中调用【this.getActionBar()】就会出现Call requires API level 11 (current min is 8): android.app.Activity#getActionBar的错误。这是因为ActionBar是在Android 11才出现的新功能(new API)。

2. targetSdkVersion

targetSdkVersion是Android提供向前兼容的主要依据,表明该application已经兼容从minSdkVersion至tartgetSdkVersion之间所有api的变化。在targetSdkVersion更新之前系统不会应用最新的行为变化。

3. 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 和新特性提供兼容性支持。

4. 他们三者的关系

minSdkVersion <= targetSdkVersion <= compileSdkVersion

5. 理想情况下应该是

minSdkVersion (lowest possible) <=targetSdkVersion == compileSdkVersion (latest SDK)

理想情况下:用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。

6. Android主Module与依赖Module之间targetSDKVersion的关系

Android项目以主Module的targetSDKVersion为准。也即是说,依赖Module targetSDKVersion的设置是无效的。

你可能感兴趣的:(minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析)