转载自 https://blog.csdn.net/zy_jibai/article/details/82283996
今天给大家带来一片简短的文章。虽然不是什么非常重要的知识点,但是我们天天都在接触的一个东西。
android {
compileSdkVersion 27
defaultConfig {
applicationId "pers.jibai.dailytext"
minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
相信这段代码大家都不会陌生,在我们每个项目的Module中都会有一个对应的build.gradle文件,里面就有这样一段代码。但是刚开始看感觉完全看不懂呀有木有!其实学了Android这么长时间了,我一直也没管这块的东西,现在也是在项目依赖的时候出了问题才发现这块知识也是必不可少的。
要说SdkVersion大家都知道是SDK的版本,但是一开始接触会发现build.gradle中有三个SdkVersion,分别是compileSdkVersion、targetSdkVersion、minSdkVersion。
compileSdkVersion是指编译时的sdk版本,就是点击这个绿色三角的时候,编译的过程中会以该版本的sdk进行编译。如果发现不符合的会报错。
而且我们都知道Android Studio有预编译的功能。当我们在代码中写了一段代码时,这时候预编译的效果就出现了:如果这段代码在Android 5.0之后被弃用的,而compileSdkVersion是24(7.0),那么这时候会发现你的代码会出现删除线。
举个栗子:
在Android5.0之前getResource().getColor()方法可以使用,但是在之后该方法被打上删除线,已经被弃用。当compileSdkVersion设置为21,你就会发现这个删除线出现了,也有没有出现的情况,只能说Android Studio预编译的功能可能出了点bug。
minSdkVersion是指安装Apk的最低版本号,手机系统低于这个版本号的是无法安装Apk的。这个不用多说什么了吧。
targetSdkVersion
AsyncTask线程池在API10版本之前和之后使用情况有所不同:在API10(Android2.3.3)之前,AsyncTask线程池是可以并行执行的,而现在的AsyncTask是串行执行。
一点小建议:
在一般情况,我们最好吧compileSdkVersion设置为当前最高的,因为这样我们可以通过AS的预编译功能,了解到经常用到的哪些代码已经被弃用,哪些有些的用途。
targetSdkVersion和compileSdkVersion最好相同。道理同上。
targetSdkVersion如果进行变换了之后,最好对整个项目进行重新测试。上面的AsyncTask就是很好的例子,在不同targetSdkVersion下执行逻辑不同,因此现在的targetSdkVersion改变所带来的逻辑改变,可能会导致bug出现
最后给大家带来一张是那种SdkVersion的关系吧: