Android SdkVersion那些事儿
本文对android项目中的compileSdkVersion、targetSdkVersion、minSdkVersion、maxSdkVersion和buildTarget等概念做一个说明。
compileSdkVersion
定义
编译或构件时采用的API版本,你在项目中查看的android系统相关的源码与这个compileSdkVersion指定的是一致的。
说明
- 在eclipse中位于项目根目录中的project.properties文件中(target=xx);
- 在android studio中位于项目中的build.gradle中;
- 强烈推荐总是使用最新的 SDK 进行编译(默认就是最新的);
- 修改 compileSdkVersion 不会改变运行时的行,但可能会出现新的编译警告、编译错误;
- compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用;
- 如果使用 Support Library ,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译(对应关系)。
targetSdkVersion
定义
表明当系统api小于或等于targetSdkVersion值时,系统运行程序不用做兼容处理;(相当于告诉系统,我开发时是针对targetSdkVersion指定版本已经做过兼容的)
说明
- 如果不设置,默认值和minSdkVersion相同;
- 应用程序仍然能在低于targetSdkVersion的系统上运行;
- 系统API高于targetSdkVersion,系统会开启向前兼容模式;反之,系统将不采用兼容模式,认为开发者已做兼容处理,而直接正常运行这个程序;
- targetSdkVersion这个值是在运行时起作用的,该值告诉系统到底要不要采用向前兼容模式来运行程序;
建议开发时将targetSdkVersion设置为最新的值,这样就可以应用新功能,并对新功能做兼容性测试
minSdkVersion
定义
运行应用程序所需要的最低Sdk 版本
说明
- 不指定,默认值为1,表明兼容所有android版本;
- 系统API高于minSdkVersion时,系统会组织应用的安装;
- 如果使用了高于minSdkVersion 的api(方法属性等),编译时会报错;
- minSdkVersion要取所有依赖项目中minSdkVersion的最大值,这样才能保证项目运行后不会报错;
maxSdkVersion
运行应用程序支持的最高版本(超过该版本运行不了)
说明
显然这个属性不符合事物发展的规律,现已不推荐使用,或者说已经失效了。
高版本方法在低版本系统上的兼容性处理
采用注解的方式
- 添加@TargetApi($API_LEVEL)可使编译通过
- 添加@SuppressLint(“NewApi”)屏蔽一切新API才可使编译通过(一个方法中引用了多种不同API的新方法)
1
2
3
4举个例子,某个方法中使用了api9新加入的方法,而项目设置的android:minSdkVersion=8,此时在方法上加@SuppressLint("NewApi")
和@TargetApi(Build.VERSION_CODES.GINGERBREAD)都可以,以上是通用的情况。
而当你在此方法中又引用了一个api11才加入的方法时,@TargetApi(Build.VERSION_CODES.GINGERBREAD)注解的方法又报错了,而
@SuppressLint("NewApi")不会报错运行时判断
在低版本上不调用该方法,而自己提供低版本上的功能实现
下表列出了各 Android 平台版本支持的 API 级别:
平台版本 | API 级别 | VERSION_CODE | 备注 |
---|---|---|---|
Android 7.0 | 24 | N |
平台亮点 |
Android 6.0 | 23 | M |
平台亮点 |
Android 5.1 | 22 | LOLLIPOP_MR1 |
平台亮点 |
Android 5.0 | 21 | LOLLIPOP |
|
Android 4.4W | 20 | KITKAT_WATCH |
仅限 KitKat for Wearables |
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.4Android 2.3.3 | 10 | GINGERBREAD_MR1 |
平台亮点 |
Android 2.3.2Android 2.3.1Android 2.3 | 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 |