compileSdkVersion、minSdkVersion和targetSdkVersion

2021/08/06

compileSdkVersion、minSdkVersion和targetSdkVersion

Gradle中常见的配置如下:

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
    }
}

minSdkVersion

最好理解,最低支持的Android SDK版本。比minSdkVersion还低的版本不好意思,安装不了。还有个对应的最高版本maxSdkVersion,基本不用,因为系统升级后可能会出现APP不能用的情况。

compileSdkVersion

编译期间用的Android SDK版本(只编译时用,不会被打包进APK里

总是推荐用最新的,可能会出现编译警告、编译错误,但是不会被打包到apk里面(因为实际上用的是targetSdkVersion的版本),但是提前用最新的SDK可以避免使用弃用的API(提前修复警告),为以后的targetSdkVersion升级做好准备。

buildToolsVersion 是编译工具集的版本号,所以跟 compileSdkVersion 放在一起,大版本号也要保持一致(比如上面的 compileSdkVersion30buildToolsVersion30.0.3)。

targetSdkVersion

targetSdkVersion决定了运行期间使用哪个Android SDK版本的特性。(会被打包进APK里

三者合理的关系:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

三者理想的关系:

minSdkVersion <= targetSdkVersion == compileSdkVersion

targetSdkVersion 是 Android 系统提供前向兼容的主要手段。(通过下面「打疫苗送东西」的例子理解这句话)

通过图片来理解targetSdkVersion的工作原理

一般我们开发时各个 Sdk Version 的版本情况:

  • targetSdkVersion 的SDK,统一用targetSdkVersion版本的方法处理;
  • targetSdkVersion 的SDK,需要自己用 if...else 兼容各个版本。

如果要升级 targetSdkVersion

  • 升级 targetSdkVersion 能使APP在新SDK中有新的表现;
  • 新SDK中的API有改动的话,要增加 if...else 的分支;
  • 为了兼容低版本,弃用的方法仍然会被保留。

完毕。


公众号:JairusTse的日常

(转载本站文章请注明作者和出处 JairusTse的技术博客

Post Directory