Android中几种sdkVersion的区别

最近遇到一个由于升级了targetSdkVersion而引起的线上crash,之前一直对于Android里面几个sdkVersion的含义和作用很模糊,正好这次把这几个不同的sdkVersion理清楚。

  • minSdkVersion

用于指定应用运行所需最低API级别的整数。如果系统的API级别低于属性中指定的值,Android系统将阻止用户安装应用。

  • compileSdkVersion

compileSdkVersion只是用来告诉Gradle用哪个Android SDK版本编译你的应用,当使用到新添加的API时就需要使用对应Level的Android SDK。这里需要强调的是,compileSdkVersion只会影响编译的时候,例如,当前我们想使用Android 12一个新的API功能,这时我们就需要将compileSdkVersion升级到31

1
2
3
4
android {
compileSdkVersion 31
...
}

但是这里我们指定了compileSdkVersion到新版本只是让APP编译可以通过,因为在旧的Android系统上还没有使用的新的API,因此在实际代码中还需要对运行时的系统API级别进行判断,保证使用的新API只会在Android12以上的系统运行。

  • targetSdkVersion

要理解targetSdkVersion,需要知道targetSdkVersion在Android中的作用。targetSdkVersion是Android系统提供向后兼容的主要手段(即:新版本SDK手机兼容旧版本SDK工程)。这是什么意思呢?随着 Android 系统的升级,某个系统的 API 或者模块的行为可能会发生改变,但是为了保证老 APK 的行为还是和以前兼容。只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性。
总结: android更新api大概有两种,一种是完全重写(这种就不干targetSdk什么事了);另一种,保留了老版本的处理逻辑,同时又新增了新的逻辑(用if else的方式来判断具体运行哪段逻辑)。而targetSdk就是用来判断这个if-else的。