Android游记2——关于compileSdkVersion、minSdkVersion、targetSdkVersion
三味码屋
2020年09月28日
1,688次浏览
compileSdkVersion
:编译工程代码的Android SDK版本。
也就是在Android Studio中External Libraries中看到的Android API Platform版本。
compileSdkVersion仅仅指定了编译工程源码的Android SDK环境,并不会打包到APK中,打包后的APK被安装在设备上之后,就将在设备对应的Android SDK环境中运行。
minSdkVersion
:应用兼容的最低版本。
例如应用的代码中使用了某个API,而这个API是在AIP Level 21中才开始增加的,那么,如果要保证应用能够在所有设备上都能正常运行,可以采取两种方案:
- 在代码中对当前设备版本进行判断,只有在满足
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
的条件下才调用API,或者使用@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
对调用API的地方进行标注,只有Android版本为5.0及以上版本才会执行API的调用。
- 指明
minSdkVersion
为21,这样只有设备的Android SDK版本大于或等于minSdkVersion
时,才能安装应用。
targetSdkVersion
:指明应用表现行为的Android SDK版本。
Android不管是出于提升用户体验,还是出于对安全的考虑,每一次重大升级或多或少都会带来一些行为的变更,例如Android 6.0为增强用户隐私安全开始增加的运行时权限,Android 7.0为限制应用间访问文件带来的FileProvider等等。如果我们要让应用使用这些新行为,那么就需要将targetSdkVersion
设置为新行为对应的版本或更高的版本,如果不更新targetSdkVersion
版本,则应用表现出来的行为将依然是旧版本的行为。
这三个版本怎么设置比较好呢?一般来讲:
- 为了更好检查编译问题,例如提升代码规范,检测编译警告,建议
compileSdkVersion
设置为最新的API Level;
minSdkVersion
则根据业务场景及用户群体情况等因素进行设置,一般力求兼容到更低的版本,因为minSdkVersion
越低就表示能够使用应用的设备页就越多;
- 为了追求更好的用户体验、使用到最新的优秀特性,
targetSdkVersion
也尽可能设置为最新的API Level,但是当targetSdkVersion
更新后,我们需要做的第一件是就是对照着官方的“用户行为变更说明”适配这些新特性,如果不经过适配,那么就很可能会有BUG;
- 目前,Google要求
targetSdkVersion
至少在26及以上版本;
- 一般地,三个版本之间的关系是:
compileSdkVersion
>=targetSdkVersion
>=minSdkVersion
。