原文:http://android.eoe.cn/topic/android_sdk
:可以让开发者通过一个表示API级别的整数来描述程序在android平台上的兼容性,系统会将与系统本身提供的API级别与应用指定的API级别比较。
尽管他有这个名字,但是该元素只是用来指定API级别,并不是用来指定SDK或者android平台的版本号。API级别也是一个整数,但是你不能根据android版本号来追溯API级别(例如,它并不等同于主版本号或是主版本与次版本号的和)。
同样,请阅读Versioning Your Applications文档.
::http://developer.android.com/assets/images/icon_play.png Google Play 与属性:
::Google Play会过滤应用对用户的可见性,用户只能看见和下载那些与用户设备兼容的一些应用。过滤应用的一种方式就是通过Android版本的兼容性。为此,Google Play会检查每个应用的Manifest文件标记的属性来构建版本兼容性范围,然后会根据它与用户Android系统的API级别的比对来决定隐藏或者显示该应用。可以参考Filters on Google Play.
属性:
:android:minSdkVersion
::一个整数来指定程序可以运行的最小版本。如果用户系统的API级别小于该属性指定的值,系统将会阻止用户来安装此应用。你应该一直声明这个属性。
* 注意* :
如果没有显示的声明该属性,系统指定一个默认值1,表明你的程序兼容Android系统的所有版本。如果应用并不是兼容所有的版本的android系统(举例来说,应用用到了API3 才引用的API),而且你没有声明minSdkVersion属性,当应用安装到API的级别小于3的系统上且试图访问不可用的API时,系统将会异常终止。有鉴于此,请确定,应用已显式声明 minSdkVersion属性。
:android:targetSdkVersion
::一个整数用来指定应用目标的API级别。如果没有设置,默认值等于minSdkVersion所给的值。
::该值用来告诉系统应用已经在目标版本上进行测试以及系统可以不启用任何兼容性行为来维持你的应用的向前兼容性。应用同样可以在老版本上运行(向前一直追溯到minSdkVersion).
::当android演变为一个新的版本,一些行为甚至外观可能会改变。如果,用户平台的API级别比应用声明的targetSdkVersion版本高,系统可以启动兼容性行为来确保你的应用程序继续以你期望的方式工作。“你可以通过指定targetSdkVersion与应用可运行的平台的API等级相匹配来禁用这种兼容性行为。例如,将值设置为“11”或更高,允许系统使用一个新的默认主题(整体)到你的应用程序并且禁止
::屏幕兼容模式当程序安装更大的屏幕上的时候(因为API11隐式的支持更大的屏幕)。
::有许多兼容性的行为是可以设置的,这些行为描述可以参考Build.VERSION_CODES.
::为了维护您的应用程序沿着每个Android版本发布,你应该增加这个属性的值,以符合最新的API级别,然后在相应平台版本上彻底地测试您的应用程序。
:android:maxSdkVersion
::一个整数来制定应用支持的最大的API级别.
::在Android1.5,1.6,2.0和2.0.1,系统会在安装应用程序和系统更新时重新验证这个属性的值。在任何情况下,如果应用程序的maxSdkVersion属性是低于系统本身所使用的API级别,那么系统将不允许应用安装。在系统更新后重新验证失效后,系统会立即将此应用从设备移除。
::为了说明这个属性如何影响系统更新后您的应用程序,考虑下面的例子:
::应用程序在它的manifest声明maxSdkVersion=“5”,并且发布在谷歌电子市场。用户的设备运行Android1.6(API等级4)下载并安装应用程序。几个星期之后,用户接收到Android2.0(API等级5)空中系统更新。安装更新后,系统会检查应用程序的的maxSdkVersion,并成功地重新验证它。应用的功能和正常一样。然而,一段时间后,设备接收到另一个系统的更新,升级到Android2.0.1(API等级6)。系统更新后,应用程序不能再通过重新验证,因为系统自身的API级别(6)现在是高于应用支持的最大的API级别(5)。系统就可以在用户可见之前移除该应用.
* 警告* :不建议声明此属性。首先:是没有必要去设置属性来阻止应用被安装在新的android平台上,根据设计,android平台是完全向后兼容的,假如你的应用使用标准的API,就应该会在新版本上正常工作.二:请注意,设置这个属性后,其结果是在系统升级到更高的API等有后,应用将会从用户的设备上被移除掉。你的应用可能被安装到的大多数设备,都会收到定期的系统升级信息,在设备这个发生之前,你应该充分考虑到这种情况对应用影响。.
:介绍在:
::API等级4
:未来版本的Android(超过Android2.0.1的)将不再检查或执行安装过程中验证maxSdkVersion属性。然而,在呈现给用户可供下载的应用时,电子市场依旧将其作为作为一个过滤器使用。。
介绍在:
:API等级1
:API等级是由Android平台提供的用来唯一识别API框架版本号的一个整形数值。.
:Android平台提供了一个API框架,应用程序可以使用其与底层的Android系统进行交互。该框架API包括:
::* 一套核心的包和类
::* 一个XML元素和属性集来声明一个manifest文件
::* 一个XML元素和属性集来声明访问的资源
::* 一组intent(意图工具)
::* 一组系统权限,应用程序可以请求,也可以强制允许包含在系统内.
:每个后续的android平台会把他提供的更新包含在android API中.
:API升级的模式是设计向后兼容的,所以新的API仍然兼容早期的API版本,也就是说大部分分的变化是新增加API或者对原有的进行替换,例如:部分API被升级,这些老的被弃有,但是不会删除,使现有的应用程序仍可以使用它们。在极少数情况下,部分的API可能被修改或删除,这种变化通常只需要确保API的健壮性和应用程序或系统的安全性。所有其他API部分,无需修改。
:Android平台提供的API框架指定了一个整数标识符,称为“API级别”。虽然每一个Android平台版本精确地支持一个API等级,但是其隐含的支持所有早期的API级别(直至API等级1)。 Android平台提供的API 初始版本(API等级1)和后续发行版本的API等级是递增的。
下表指定API级别支持的每个版本的Android平台:
<!--以后写这个表格 fuck 好像又丢了一大段.......-->
{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
<!-- 这段是表头 -->
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 平台等级
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | API等级
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 版本代号
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 备注
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 4.1, 4.1.1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
16
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
JELLY_BEAN
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 4.0.3, 4.0.4
15
ICE_CREAM_SANDWICH_MR1
Platform
Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 4.0.3, 4.0.4
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
15
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
ICE_CREAM_SANDWICH_MR1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 4.0, 4.0.1, 4.0.2
14
ICE_CREAM_SANDWICH
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 4.0, 4.0.1, 4.0.2
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
14
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
ICE_CREAM_SANDWICH
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
<!-- Android 3.2
13
HONEYCOMB_MR2
<!-- Platform
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 3.2
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
13
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
ICE_CREAM_SANDWICH_MR1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 3.1.x
12
HONEYCOMB_MR1
Platform Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 3.1.x
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
12
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
HONEYCOMB_MR1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 3.0.x
11
HONEYCOMB
Platform Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 3.0.x
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
11
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
HONEYCOMB
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 2.3.4Android 2.3.3
10
GINGERBREAD_MR1
Platform
Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 2.3.3
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
10
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
GINGERBREAD_MR1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 2.3.2Android 2.3.1Android
2.3
9
GINGERBREAD
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 2.3
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
9
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
GINGERBREAD
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 2.2.x
8
FROYO
Platform Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 2.2.x
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
8
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
FROYO
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 2.1.x
7
ECLAIR_MR1
Platform
Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 2.1.x
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
7
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
ECLAIR_MR1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 2.0.1
6
ECLAIR_0_1
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 2.0.1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
6
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
ECLAIR_0_1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
<!-- Android 2.0
5
ECLAIR
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 2.0
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
5
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
ECLAIR_0_1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
<!-- Android 1.6
4
DONUT
Platform Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 1.6
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
4
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
DONUT
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 1.5
3
CUPCAKE
Platform Highlights
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 1.5
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
3
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
CUPCAKE
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
版本特色
<!-- Android 1.1
2
BASE_1_1
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 1.1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
BASE_1_1
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
<!-- Android 1.0
1
BASE
-->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
Android 1.0
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
BASE
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
|}
:API级别标识符是一个关键角色,是为了确保最好的体验给用户和应用开发人员:
::* 它可以让Android平台形容它支持的最大API框架版本
::* 它让应用程序的描述它们需要的API框架版本
::* 它可以让系统判断用户的设备上安装的应用程序,这样的版本不兼容的应用程序不会被安装.
:在Android系统中每一个Android平台版本的内部存储了API等级标识。
:应用程序可以使用一个manifest元素,API框架提供的——描述了他们能够运行的最小和最大API级别,以及被设计来支持的首选API级别。该元素提供了三个关键属性:
::* Android:minSdkVersion - 指定应用程序能够运行最低的API级别。默认值是“1”。
::* Android:targetSdkVersion - 指定该应用程序被设计为运行在API级别。在某些情况下,允许应用程序使用manifest元素或特定的行为来制定目标的API级别,而不是被限制只使用最低的API级别的定义。
::* Android:maxSdkVersion - 指定该应用程序是能够运行的最大API级别。重要的是:使用这个属性之前,请仔细阅读文件。
"例如,为了一个应用程序运行需要的最低API级别,应用程序要指定包括在其manifest中的一个Android元素:minSdkVersion属性。Android:minSdkVersion的值为一个整数,其对应于该应用可以运行的最早版本的Android平台的API等级。。
:当用户试图安装一个应用程序,或者当系统的更新时,Android系统首先检查应用程序在manifest中的属性。和自身内部的API级别比较后。如果这些条件得到满足,应用才可以被安装:
::* 如果一个Android:minSdkVersion属性被声明,其值必须小于或等于系统的API级别的整数。如果没有声明,系统默认应用需要API等级是1。
::* 如果一个Android:maxSdkVersion属性被声明,其值必须等于或大于系统的API级别的整数。如果没有声明,系统假定该应用程序有没有最大的API级别。请阅读文件,以了解系统是如何处理这个属性的。
:当在应用程序的manifest声明时,的元素可能看起来像这样:
...
:主要的原因,应用程序在Android:minSdkVersion 声明的API等级是告诉Android系统,它使用的API,是在他指定的API级别上引进的。如果应用程序以某种方式安装在一个较低的API级别的平台,当它试图访问不存在的API,那么它会在运行时崩溃。该系统可以防止这种不容许的应用程序被安装,如果它要求的最低API级别高于目标设备上的平台版本。
:例如,android.appwidget包被引入的是API等级3。如果应用程序使用了这个API,它必须声明Android:minSdkVersion属性值为“3”。然后,应用程序将安装到平台,如Android1.5(API等级3)和Android1.6(API等级4),但不会安装到Android1.1(API等级2)和Android1.0平台(API等级1)。
:欲了解更多有关如何指定应用程序的API等级要求的信息,见manifest 文件的文档章节。
:下面的章节描述了开发应用程序时,你应该考虑的API级别的相关信息。
:Android应用程序一般都是向前兼容Android平台的新版本。
:因为几乎所有API框架的变化是添加的,Android应用程序开发使用的API的任何版本(例如指定其API级别),都应该是android系统,和API的顶级中向后兼容的,除了在特定的情况下,应用程序使用后来由于某种原因删除的一部分API,应用程序应该能够运行在所有更高版本的Android平台上。
:向前兼容性是非常重要的,因为许多基于Android的设备接收空中系统更新(OTA)。用户可以安装你的应用程序,并正常使用,后来收OTA更新到新版本的Android平台。一旦安装此更新,您的应用程序将运行在一个新的运行环境,而他有能力提供你的应用依赖的API版本。
:在某些情况下,API之下的变化,例如那些底层系统本身,可能会在应用程序运行于新的环境中时,影响您的应用程序。出于这个原因,它是对你非常重要,作为应用程序开发人员,要明白应用程序在每个系统环境中的的外观和行为。您可以下载各种版本的Android SDK,来帮助您测试您的应用程序。每个平台包括一个兼容的系统映像,是您可以运行的AVD(android虚拟机),用来测试您的应用程序。
:当遇到比对它们进行编译的版本更旧的Android平台版本时,Android应用程序不一定是向后兼容的。
:每个新版本的Android平台,可能会包括新的框架的API,例如用程序访问到某些新的平台功能,或部分被替换的API。根据所指定的API等级,当应用程序运行在新的平台,或是如前所述,运行在更新平台版本上时,它可以访问那些新的API。相反,由于平台的早期版本不包括新的API,使用新的API的应用程序都无法在这些平台上运行。
:尽管Android系统的设备将不可能被降级到旧版本的平台,但重要的是要认识到,在该领域的许多设备可能运行在更早期的平台上。即使是收到OTA更新的设备,有些人可能会滞后,可能在很长时间里不会收到更新。
:当您正在开发的应用程序,你需要选择对你编译应用程序的平台版本。在一般情况下,你应该选择您的应用程序可以支持的最低的版本来编译您的应用程序。
:你可以从最低的版本开始,直到能成功编译您的应用,来确定最低版本,然后应该使用相应平台版本(和API级别)创建AVD来全面测试您的应用程序。确保在应用程序的manifest中声明了Android:minSdkVersion,并将其值设置为平台版本的API级别。
:如果你建立一个应用程序,使用了最新版本的平台中引入的API或系统功能,你应该设置Android:minSdkVersion的属性为平台的最新版本的API级别。这可确保用户只能够在其设备运行在一个可兼容的Android平台时,才能安装这个应用程序。反过来,这将确保您的应用程序可以在他们的设备正常运作。
:如果您的应用程序使用平台的最新版本中引入的API,但没有声明Android:minSdkVersion属性,然后将正常运行的设备上运行的平台的最新版本,而不是设备上的平台上运行的早期版本。。在这种种情况下,当它试图使用不存在于早期版本的API,应用程序在运行时会崩溃。
:编译您的应用程序之后,您应当确保到应用程序的指定的平台上测试Android:minSdkVersion属性。要做到这一点,使用您的应用程序所需要的平台版本创建AVD。此外,为了保证向前兼容,你应该使用比您的应用程序所使用的API级别更高的所有平台上运行和测试。
:Android SDK中包括多个平台版本,您可以使用,包括最新版本,并提供更新,如果需要您可以使用其他平台版本下载更新的工具。
:要访问更新,使用Android的命令行工具,位于的/ tools目录。您可以通过执行Android SDK的SDK updater。你也可以简单地双击android.bat(Windows)或Android的的文件(OS X中/ Linux)。在ADT中,你还可以通过选择Window> Android SDK的管理器(android sdk manager)来访问更新。
:要针对运行在不同的平台版本模拟器中的应用,要创建测试每个平台版本的AVD。欲了解更多有关AVD的信息,请参阅Creating and Managing Virtual Devices。如果您正在使用真实的设备进行测试,确保您知道它运行的Android平台的API级别。详见本文件顶部的平台版本名单和他们的API等级。
在某些情况下,可能是“先睹为快”的Android SDK平台。让你在并不是最终API的平台上进行开发,平台的API等级整数不会被指定。相反,您必须在您的应用程序'manifest'中临时使用该平台的API级别,以建立对平台的应用。一个临时的API级别不是一个整数,而是一个字符串匹配的未发行平台版本的代号。临时API级别会在‘先睹为快’的SDK发行说明中指定,并且是区分大小写的。
使用一个临时的API级别的设计,以防止应用程序开发人员和设备的用户不经意间发布或者安装基于“先睹为快”的API框架的应用程序,它可能无法在使用了最终系统映像的实际设备上正确运行。
临时的API级别只会对使用“先睹为快”SDK 是有效的,是只能用在模拟器中运行的应用程序。一个应用程序使用临时的API级别将永远不能被安装在Android设备上。在最终版本的平台上,您必须把您应用程序的manifest中所有临时API级别的实例替换为最终平台的实际API级别整数。
Android开发者网站上的参考文档页面,在每一页的右上角区域都提供了“API等级过滤器”控制。您可以使用它来显示部分API,您可以使用基于manifest文件中Android:minSdkVersion属性所指定的API等级来控制,以显示那些你的应用程序可以访问的部分API。。
使用复选框以启用选择过滤,在低于页面的搜索框的位置。然后设置“API级过滤器”指定为您的应用程序相同的API等级。请注意,在更新的API级别推出的API,然后变灰,其内容被屏蔽,因为他们对您的应用程序是不可见的。
文档中的API等级过滤,并不显示的什么是新的或在哪个API等级中引入的 - 它只是提供了一种方法,通过给定的API等级来查看整个API,同是包括在以后的API级别引入的API元素
如果你不想过滤API文档,只需使用复选框来禁用该功能。默认情况下,API级过滤被禁用,这样您就可以查看完整的框架API,而不考虑API级别。
还要注意的是在单独的API元素参考文件中申明了每个元素,包和类的被引入的API级别,被指定为“Since ”,并放在每个文档页面内容区域的右上角的包。类成员的API等级则在他们详细的描述标题中指定,在靠近右边框的地方。