前言html
本章内容为开发者指南(Dev Guide)/Appendix/Android API Levels,版本为Android3.0 r1,翻译来自:"jackeylu",欢迎你们访问他的博客:" http://jackeylu.wordpress.com/",再次感谢"jackeylu" !期待你一块儿参与翻译Android的相关资料,联系我over140@gmail.com。
原文app
http://developer.android.com/guide/appendix/api-levels.html框架
Android API Levelside
在本文中wordpress
参见
<uses-sdk> manifest element
当你开发你的Android应用程序时,了解该平台API变动管理的基本方法和概念是颇有帮助的。一样的,知道API级别标识以及该标识如何保障你的应用与实际硬件设备相兼容对于开发及后续的发布、维护都是有益的。
本节内容告诉你API级别的知识,以及它如何影响你开发和使用的应用。
关于如何使用“以API级别进行过滤”来使用API参考手册,从本文末尾的文档过滤(Filtering the documentation)中能够获得更多信息。
API级别是什么?(What is API Level?)
API级别是一个整数值,它惟一标识了一个具体版本的Android平台,及其框架的API的版本。
Android平台提供了一套框架API,使得应用程序能够与系统底层进行交互。该框架API由如下模块组成:
每一个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提供的清单文件元素 — <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级)上倒是没法安装的。
欲知关于如何声明应用程序API级别需求的更多信息,请阅读文档中关于清单文件的<uses-sdk>章节。
开发者须要考虑的内容(Development Considerations)
本节属于应用程序开发者须要了解的内容。
应用程序的向前兼容性(Application forward compatibility)
Android应用程序通常向前兼容于Android平台的新版本。
这是由于几乎全部的框架API变动都是添加性质的,一个以某种版本的API开发的应用程序是向前兼容与后续Android系统及高版本API。应用程序应当能够运行于高版本的平台,除非使用了将来因某种缘由移除的API。
向前兼容性的特性如此重要,是由于不少的Android驱动的设备可以使用OTA远程下载技术进行系统更新。用户开始时可以很好的安装和使用你开发的应用程序,后来进行了OTA升级到新版本的Android平台。一旦升级完毕,你的应用程序将运行在一个新的版本环境下,而这个环境应当包含了你的应用程序所需的API和系统功能。
某些状况下,API背后的变化,例如系统底层的变化,可能会影响到你的应用程序运行在新的环境下。为此,做为应用程序开发人员,应当了解应用程序在不一样系统环境下将会有如何的外观和行为。Android SDK包含了多个平台版本,开发人员能够下载下来,用于测试本身的应用程序在不一样版本下的运行状况。每一个版本的平台都提供了兼容的系统镜像,你能够将应用程序运行在对应的Android虚拟设备(模拟器)上进行测试。
应用程序的向后兼容性(Application backward compatibility)
Android应用程序不必定向后兼容于那些比这些应用程序开发环境低的平台环境。
Android平台的每一个新版本包含了新的框架API,例如新的平台功能,或者替代部分已有的API。应用程序在新平台上能够访问这些新的API,就像以前提到的,在后续更新的版本中,这些新功能API也是能够继续使用。相反的,由于早期版本的平台不会包含新的API功能,使用了新API的应用程序在那些旧平台上是没法运行的。
虽然一个Android平台设备不太可能降级到之前的版本,可是须要了解的是:实际生活中可能会有不少设备运行的是较旧的平台版本。即便在设备接收到OTA远程下载升级,有些人仍然可能会滞后甚至可能不会收到更新。
平台版本和API级别的选择(Selecting a platform version and API Level)
当你开发应用程序时,你须要选择一个平台用于编译该应用程序。一般,你应该在你的应用程序能够支持的最低版本的平台上进行编译。
你能够经过寻找最低的能够支持你的应用程序编译的平台方式来决定你将会支持的最低平台版本。一旦你肯定了支持的最低版本后,你就能够建立对应版本的AVD模拟器来全面测试你的应用程序。你须要注意的是不要忘记在应用程序清单文件中申明android:minSdkVersion
属性,并赋上正确的
API
级别标识。
声明最低API级别(Declaring a minimum API Level)
若是你开发的应用程序使用了最新平台上引入的API或平台特性,你就须要将android:minSdkVersion
属性赋最新平台的
API
级别标识。这将保证用户只能在他们的设备与你的应用程序平台版本兼容状况下安装。反过来讲,这样可以保证你的应用程序在他们的设备上表现正常。
若是你用了最新的API或平台特性,可是没有申明android:minSdkVersion
属性,那么你的应用程序在最新平台上运行是没有稳定,可是在早期版本的平台上是会出错的。在后一种状况,应用程序在尝试访问旧平台上不存在的
API
时会崩溃。
针对高版本的API级别测试(Testing against higher API Levels)
编译完你的应用程序,你应当在支持的最低版本平台上详细测试应用程序的表现。能够经过建立对应平台的AVD模拟器进行测试。此外,要保证向前兼容性,你应当在你的应用程序可能运行的更高平台版本上进行运行和测试。
Android SDK包含了多个平台版本供开发者使用,其中包括了最新的版本,而且提供了升级工具使得开发者能够获取其余的版本。
要使用升级工具,能够经过Android命令行方式,该工具位于<sdk>/tools路径下。你能够用敲入android指令运行该升级工具,而不用指定任何参数。你也能够简单地经过双击Windows下的android.bat或OS X/Linux下的android文件来启动升级工具。在ADT工具界面,你能够经过菜单的Window > Android SDK and AVD Manager来访问升级工具。
要想将你的应用程序在不一样平台版本的模拟器上运行,须要建立对应的AVD设备。关于AVD的更多信息,请参见Creating and Managing Virtual Devices。若是你用物理设备进行测试,确保清楚运行的具体平台版本。经过本文开始部分的映射表格能够知道平台版本对应的API级别标识。
使用临时的API级别(Using a Provisional API Level)
某些状况下,有可能会发布“早期预览(Early Look)”版的Android 平台SDK。在此平台版本上开发使用的API将不会是最终发布版,平台的API级别标识数字就不会指定。你必须在程序清单文件中使用临时的API级别进行标识,以便创建对应的平台应用。临时API级别不是一个整数,而是一个表示未发布的平台版本的字符串代号。“早期预览”版本的API级别在发布说明中会申明,该代号是大小写敏感的。
临时API级别标识的用途是保护开发者和设备使用者免于无心中发布或安装在“早期预览”平台版本上开发的应用程序,这些应用程序可能在最终的发布系统上运行不稳定。
临时API级别标识仅仅在使用“早期预览”版本的SDK下有效,而且只能运行应用程序于模拟器之中。实际的Android设备上是没法安装使用临时API级别标识的应用程序的。在最终版本平台发布后,你必须将程序清单文件中用到的临时API级别标识替换成最终平台的实际API级别整数值。
经过API级别进行文档内容过滤
(Filtering the Reference Documentation by API Level)
Android开发者站点上的参考文档的每一个页面的右上方提供了“Filter by API Level”控件。你能够用这个控件来仅仅显示你应用程序相关的那部分API文档,能够经过应用程序清单文件中的android:minSdkVersion
属性值进行过滤。
要使用过滤功能,能够经过页面搜索框下面的选择框来启用过滤功能。好比设定“Filter by API Level”控件内容与你应用程序申明的相同。注意:在选定级别以后引入的心API会以灰色显示,而且内容被隐藏,由于你的应用程序是没法访问这些新功能。
API级别过滤方法不会提供每一个API级别中新添加的功能视图,仅仅展示对应API级别的整个内容,其中去除了后续新版本中的内容。
若是你不想过滤API文档了,只须要关闭该选择框的特性。API级别过滤默认是关闭的,所以你能够看到整个框架API的全貌,而无论具体的API级别。
还要注意的是个别的API元素申明了该API参考文档在哪一级引入的。这经过在每一个文档页面正文部分的右上角的“Since <api level>”进行声明该包和类的引入信息。类成员的API级别在其详细描述文件头部的右边进行描述。