compileSdkVersion, targetSdkVersion, minSdkVersion, buildToolsVersion
compileSdkVersion 28 buildToolsVersion '28.0.1'
defaultConfig { applicationId "com.transmission.proxy" minSdkVersion 14 targetSdkVersion 28 //targetSdkVersion 23 versionCode 200053 versionName "v2.5.20" }
minSdkVersion :应用支持的Android最低版本,若系统版本高于该版本则无法安装;
buildToolsVersion:使用哪个版本的build工具,一般build版本会随着android版本的发布而发布,所以一般选取最新的sdk版本;
compileSdkVersion:用什么版本的sdk编译程序,只在编译期起作用,另外support的版本要和这个版本一致,不然会出错。建议使用最新的Android系统版本;
compileSdkVersion是我们告诉Gradle,我们是用哪一版本的Android Sdk去编译程序的,可以使用这个版本的API,比如我们使用的是7.0的版本,compileSdkVersion=24,那么我们对于拍照裁剪图片等功能的操作,就可以使用FileProvider了。
我们需要注意的是:我们改变compileSdkVersion的版本号,本质上改变不了我们程序的运行,虽然可能会报错误❌或者警告⚠️,但compileSdkVersion 只会在编译期间起作用,因为环境是compileSdkVersion这个版本的SDK,所以你可以用一些这个版本的API,但是只是IDE给你的便利性帮助而已,帮助你检测代码,避免使用一些弃用的API。就算你用个低版本的compileSdkVersion,你依然可以那么写,但是可能会报错,报警告,但是你强制打包,其实也是没有问题的。IDE只是个工具,他的环境也只是工具的环境,不代表你应用运行时的表现。
所以希望大家用最新的sdk版本作为开发环境,compileSdkVersion设置成最新的,这样我们可以使用到最新SDK的API方法和机制。
如果我们使用了比如V4,V7包,有没有发现必须和compileSdkVersion的版本相匹配,比如我们compileSdkVersion = 26,那么V4,v7的版本也要相应的是26.xx.xx,首位的26必须一致,后两位没有要求,就是说明编译所依赖的SDK和依赖包必须是统一版本,不然两个不兼容,编译会通不过。同时也是为了使用该版本的新特性
targetSdkVersion :targetSdkVersion 是 Android 系统提供前向兼容的主要手段。这是什么意思呢?随着 Android 系统的升级,某个系统的 API 或者模块的行为可能会发生改变,但是为了保证老 APK 的行为还是和以前兼容。只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性;