首先我们用AS新建一个项目,版本配置如下:
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.beixinyuan_android.handerdemo"
minSdkVersion 27
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
下面呢我来讲解一下compileSdkVersion 、minSdkVersion、targetSdkVersion之间的联系,尽量言简意赅,避免大家理解上的困难。
compileSdkVersion :当前使用哪个版本的SDK来编译项目。
minSdkVersion :当前可在终端设备运行的最小版本;
maxSdkVersion:当前可在终端设备运行的最大版本;
targetSdkVersion :App最大可以支持的API;
在这之前,我们需要了解终端设备和API的对应关系
Version | API level |
---|---|
1.0 | API level 1 |
1.1 | API level 2 |
1.5 | API level 3, NDK 1 |
1.6 | API level 4, NDK 2 |
2.0 | API level 5 |
2.0.1 | API level 6 |
2.1 | API level 7, NDK 3 |
2.2.x | API level 8, NDK 4 |
2.3 - 2.3.2 | API level 9, NDK 5 |
2.3.3 - 2.3.7 | API level 10 |
3.0 | API level 11 |
3.1 | API level 12, NDK 6 |
3.2.x | API level 13 |
4.0.1 - 4.0.2 | API level 14, NDK 7 |
4.0.3 - 4.0.4 | API level 15, NDK 8 |
4.1.x | API level 16 |
4.2.x | API level 17 |
4.3.x | API level 18 |
4.4 - 4.4.4 | API level 19 |
4.4W | API level 20 |
5.0 | API level 21 |
5.1 | API level 22 |
6.0 | API level 23 |
7.0 | API level 24 |
7.1.1 | API level 25 |
以上是我整理的终端设备版本和API的对应关系。(之后的版本后期补充)
下面开始简单,一针见血的介绍:
(1)minSdkVersion :当前可在终端设备运行的最小版本;
一张图就可以解释
没错,我手机是Android6.0的系统,对应的API是23,项目中要求最小版本号(minSdkVersion )是27,所以不能安装。想要成功安装,必须修改minSdkVersion 的值,修改成23或低于23的数值即可。
看到没?修改成22之后可以安装了。
(2)maxSdkVersion:当前可在终端设备运行的最大版本;
这个概念直接舍弃吧,AS项目中,设置maxSdkVersion也毫无作用。
(3)targetSdkVersion :App最大可以支持的API
作为一个Android开发者,如果不懂targetSdkVersion的概念就不是一个合格的开发者。
开始解释这个概念(尽量言简意赅):
Android每次更新版本都会对之前的版本的问题做了一些修复并且增加新特性。
1.如果APP的targetSdkVersion = 22,安装在Android6.0(API 23)的手机上,那么该APP就不支持API 23的新特性。
2.如果APP的targetSdkVersion = 23,安装在Android5.1(API 22)的手机上,那么则向前兼容。
就解释这么多,说多了也不好理解。
如果想要了解的更加详细,建议先了解一下每个版本的新特性吧。
(4)compileSdkVersion :当前使用哪个版本的SDK来编译项目。
先声明一下,compileSdkVersion只用在编译,和运行无关。
在某些特定情况下,为了满足项目的某个功能,需要用到高版本API的新特性,所以必须提高targetSdkVersion的值,这个时候有可能因为compileSdkVersion过小导致编译失败。
根据一系列的总结,个人感觉compileSdkVersion和targetSdkVersion的关系是这样的:
targetSdkVersion <= compileSdkVersion。