#.compileSdkVersion, minSdkVersion 和 targetSdkVersion
1.minSdkVersion:应用兼容的SDK API最低版本,若手机系统低于minSdkVersion将无法安装;
AndroidStudio中写代码时调用的API,若在兼容的版本区间中部分版本不存在,则开发者需要做版本判断来做兼容性处理,否则AndroidStudio会提示错误的,没法正常通过编译。
2.compileSdkVersion:选择用来编译的SDK版本,只影响编译过程,完全不影响实际运行过程。
实际运行中,调用哪个版本的API代码取决于手机的系统版本 以及 targetSdkVersion。
3.
targetSdkVersion:表明APP最高支持到哪个系统版本的特性,即使App中调用了更高版本系统新特性相关的API,若不更新targetSdkVersion,在更高版本系统的手机上运行时也不会执行这些API。
因为App在手机上运行调用API时,Android系统内部有兼容性处理,同一个API, 会根据APP的targetSdkVersion来判断调用哪个版本的API(不同版本的API有可能内部逻辑不同):
若当前系统版本 <= targetSdkVersion,则调用当前系统版本API;
若当前系统版本 > targetSdkVersion,则调用低版本targetSdkVersion的API;(Android系统是向前兼容的,高版本兼容低版本)
若app中调用了只有targetSdkVersion以上版本才有的API, 在高版本系统手机上实际运行时,应该并不会实际调用。
所以,要想使用新的特性和新的API,就需要更新targetSdkVersion。
4.综上:
4.1 应选择compileSdkVersion>=targetSdkVersion,否则编译用的SDK未必包含targetSdkVersion及以下支持的API,有可能会编译不通过。而且一般版本越高的SDK编译和构建工具,一般也优化的越好,所以compileSdkVersion基本上可以选最新的。
4.2 显然,targetSdkVersion >= minSdkVersion,这是傻子都能看出来的。
#.
buildTools
、
Tools
、
Platform-tools
buildTools
、
Tools
、
Platform-tools
这
3
个东西其实都是开发工具,即它的版本更新并不会影响运行的
APP
,只是工具上的升级。
在
build.gradle
中的
buildToolsVersion
版本号是Android构建工具
buildTools
的
API-LEVEL
,这个值
要大于等于
compileSdkVersion,确保不比编译用的SDK版本更旧,因为高版本
buildTools
支持低版本SDK编译出的程序,反过来不一定总是成立
。
因此,这三个工具的版本号,一般都选择最新的。
参考剪藏:
Android targetSdkVersion了解一下 - 简书
关于Android SDK里的compileSdk、minSdk、targetSdk、buildTools、Tools、Platform-tools