本文根据CSDN很多个博客整理而成
Anroid是在Linux基础开发出的一个移动设备开发平台。它自上而下包含四个部分:
-
Application(应用程序)
-
Applicaton Framework(应用程序框架)
-
Libraries&Android Runtime(库和Android运行环境)
-
OS(Linux Kernel操作系统)。
安卓版本号对应API等级
Android版本、API级别与代号对应关系
平台版本 | API 级别 | 代号 |
---|---|---|
Android 7.0 | 24 | Nougat |
Android 6.0 | 23 | Marshmallow |
Android 5.1 | 22 | LOLLIPOP_MR1 |
Android 5.0 | 21 | LOLLIPOP |
Android 4.4W | 20 | KITKAT_WATCH |
Android 4.4 | 19 | KITKAT |
Android 4.3 | 18 | JELLY_BEAN_MR2 |
Android 4.2、4.2.2 | 17 | JELLY_BEAN_MR1 |
Android 4.1、4.1.1 | 16 | JELLY_BEAN |
Android 4.0.3、4.0.4 | 15 | ICE_CREAM_SANDWICH_MR1 |
Android 4.0、4.0.1、4.0.2 | 14 | ICE_CREAM_SANDWICH |
Android 3.2 | 13 | HONEYCOMB_MR2 |
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Android 3.0.x | 11 | HONEYCOMB |
Android 2.3.3、2.3.4 | 10 | GINGERBREAD_MR1 |
Android 2.3、2.3.1、2.3.2 | 9 | GINGERBREAD |
Android 2.2.x | 8 | FROYO |
Android 2.1.x | 7 | ECLAIR_MR1 |
Android 2.0.1 | 6 | ECLAIR_0_1 |
Android 2.0 | 5 | ECLAIR |
Android 1.6 | 4 | DONUT |
Android 1.5 | 3 | CUPCAKE |
Android 1.1 | 2 | BASE_1_1 |
Android 1.0 | 1 | BASE |
配置依赖的库
我们在创建App的时候经常会设置这几个参数
android {
compileSdkVersion 23
buildToolsVersion “23.0.1”
defaultConfig {
applicationId “com.example.checkyourtargetsdk"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName “1.0”
}
}
minSdkVersion
最好理解的就是minSdkVersion了,就是我们的app能够运行的最小版本。
如果选择16,那么就是Android 4.1 以及以上的设备才能运行我们app,如果小于这个版本,那么抱歉运行不了,我们不支持。这是应用程序支持api的下限。这也是应用商店判断这个应用是否能运行在设备上的一个依据之一。
在开发中也会根据这个下限去判断,是否可以用某个api方法,如果是下限之下的那么就会有警告,避免调用一些在新的版本已经改变或者过时的方法。
当我们引用了第三方的库,如果某几个库的minSdkVersion分别是API5,API10,API16的方法,那么我们的minSdkVersion最少就是16。
对于minSdkVersion的选择,我们应该看各个api的占比,不过因为基数太大了(十几亿)所以就算是0.7%也是个天文数字,所以我们需要根据自己应用的受众,以及是否需要适配低版本的需要,一般说来我们适配4.1以上,即minSdkVersion=16,不过还要根据自己的实际情况,去选择相应的版本号。
compileSdkVersion
只在编译阶段起作用。并不会打包到apk中。
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
决定你手机真实的运行行为。会打包到apk中。
什么是目标设备SDK版本?
是和minSdkVersion相对应的上限吗?
如果我运行在比targetSdkVersion高的设备上,会出现什么?
如果是比targetSdkVersion低的设备呢?
Android Studio gradle插件版本和gradle版本对应关系,官网说明地址:
https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin