API级别是什么?(What is API Level?)
API级别是一个整数值,它唯一标识了一个具体版本的Android平台,及其框架的API的版本。
Android平台提供了一套框架API,使得应用程序可以与系统底层进行交互。该框架API由以下模块组成:
- 一组核心的包和类
- 清单(manifest)文件的XML元素和属性声明
- 资源文件的XML元素和属性声明及访问形式
- 各类意图(Intents)
- 应用程序可以请求的各类授权,以及系统中包含的授权执行
每个Android平台的后续版本会包括它提供的更新的Android应用程序框架的API。
该框架的API的更新设计,使高版本的API与早期版本兼容。也就是说,在新版本API中大多数都是新增功能,和引进新的或替代的功能。作为API的部分升级,老的替换的部分已过时,但不会从新版本中删除,使得已有的应用程序仍然可以使用它们。在极少数情况下,旧版本API的部分可能被修改或删除,通常这种变化是为了保障API的稳定性及应用程序或系统的安全。所有其他早期版本的API将不做修改的保留。
一个Android平台提供的框架API,被指定一个整数标识符,称为“API级别”。每一个版本的Android平台只支持有一个API级别,虽然该支持是隐含地包括了所有早期的API级别(一直到API级别1级)。 Android平台的最初版本提供的框架API级别是1级,随后的版本依次递增。
下表说明了具体平台版本和支持的API级别的对应关系。
平台版本 | API级别 |
Android 3.0 | 11 |
Android 2.3.3 | 10 |
Android 2.3 | 9 |
Android 2.2 | 8 |
Android 2.1 | 7 |
Android 2.0.1 | 6 |
Android 2.0 | 5 |
Android 1.6 | 4 |
Android 1.5 | 3 |
Android 1.1 | 2 |
Android 1.0 | 1 |
在Android中使用API级别(Uses of API Level in Android)
API级别标识为保证用户和应用程序开发者的最佳体验,起了关键作用:
- 它让Android平台可以描述它支持的框架API的最高版本
- 它让应用程序可以描述它需要的框架API版本
- 它使得系统可以在硬件设备上安装应用程序时能够检查版本是否匹配,使得版本不兼容的应用程序不会被错误安装在设备之上.
每个版本的Android平台都在其内部存储了自己的API级别标识。
应用程序可以用框架API提供的清单文件元素 — <uses-sdk>
来描述该应用程序可以运行的最小和最大API级别,以及应用程序开发者设计期望运行的平台版本。三种属性分别描述如下:
android:minSdkVersion
— 指明该应用程序可以运行的API最低版本。默认是“1”。android:targetSdkVersion
— 指明该应用程序设计时期望运行的目标API版本。在某些情况下,这允许应用程序使用目标API级别下定义的清单元素或行为,而不是只限于使用最低API级别定义的内容。(译者注:android之targetsdkversion的理解---兼容性问题)android:maxSdkVersion
— 指明该应用程序可以运行的最高API级别。重要声明: 使用该属性之前请阅读<uses-sdk>文档。
比如,要指明一个应用程序能够运行的最低API级别,应当在该应用程序的清单文件的<uses-sdk>元素中加入android:minSdkVersion
属性。
android:minSdkVersion
的值是一个正整数,对应的是该应用程序能够运行的最低平台的
API
级别标识。
用户尝试安装一个应用程序,或者在系统升级后重验证应用程序的时候,Android系统首先会检查应用程序的清单文件中的<uses-sdk>属性,将其与系统内部API级别对比。系统只有在满足下列情况时才允许进行应用程序安装:
- 如果声明了
android:minSdkVersion
属性,其属性值必须小于或等于该系统的API级别对应的整数值。如果未声明,系统会默认该应用程序运行需要的最低API级别是1。
- 如果声明了
android:maxSdkVersion
属性,其属性值必须等于或大于该系统的API级对应的整数值。
如果未声明,系统会默认该应用程序没有最高API级别限制。请通过阅读文档<uses-sdk>以获得系统如何处理该属性的更多信息。
应用程序清单文件中声明该属性后, <uses-sdk>
元素看起来应类似于下面的例子:
这样做的主要原因是,应用程序会通过android:miniSdkVersion声明的API级别来告知系统——该应用程序使用的API是指定引入的API级别。假如没有这种属性声明,一个应用程序如果因为某些不知名的原因被安装在低级别API系统之上,那么该应用程序会在运行时因为尝试访问不存在的API而崩溃。为此,Android系统通过不允许应用程序被安装在不满足其最低API级别要求的目标硬件上来防止此类结果发生。
例如,android.appwidget
类包是在
API
级别
3
中开始引入的。如果一个应用程序使用了这个
API
,就必须通过指明
android:minSdkVersion
属性为
3
来声明运行的最低要求。于是,该应用程序就可以在
Android 1.5
(
API
级别
3
级)、
Android 1.6 (API级别4级)等平台上安装,但是在Android 1.1 (API级别2级)和 Android 1.0 平台(API级别1级)上却是无法安装的。