Android官方文档—APP清单(uses-sdk)

<uses-sdk>

语法:

<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />

包含于:

<manifest>

说明:

允许您通过API级别整数表达应用程序与Android平台的一个或多个版本的兼容性。应用程序表示的API级别将与给定Android系统的API级别进行比较,这可能因不同的Android设备而异。

尽管名称如此,但此元素用于指定API级别,而不是SDK(软件开发工具包)或Android平台的版本号。 API级别始终是一个整数。您无法从其关联的Android版本号中派生API级别(例如,它与主要版本或主要版本和次要版本的总和不同)。

另请阅读有关版本控制应用程序的文档。

属性:

android:minSdkVersion

一个整数,指定应用程序运行所需的最低API级别。如果系统的API级别低于此属性中指定的值,则Android系统将阻止用户安装应用程序。您应该始终声明此属性。

警告:如果您未声明此属性,系统将采用默认值“1”,表示您的应用程序与所有Android版本兼容。如果您的应用程序与所有版本不兼容(例如,它使用API​​级别3中引入的API)并且您尚未声明正确的minSdkVersion,那么当安装在API级别小于3的系统上时,应用程序将在崩溃期间崩溃尝试访问不可用的API时的运行时。因此,请务必在minSdkVersion属性中声明相应的API级别。

android:targetSdkVersion

一个整数,指定应用程序所针对的API级别。如果未设置,则默认值等于给予minSdkVersion的值。

此属性通知系统您已针对目标版本进行了测试,系统不应启用任何兼容性行为来维持应用程序与目标版本的向前兼容性。该应用程序仍然可以在旧版本(低至minSdkVersion)上运行。

随着Android随着每个新版本的发展,一些行为甚至外观都可能会发生变化。但是,如果平台的API级别高于应用程序的targetSdkVersion声明的版本,则系统可能会启用兼容性行为,以确保您的应用程序继续以您期望的方式工作。您可以通过指定targetSdkVersion以匹配运行它的平台的API级别来禁用此类兼容性行为。例如,将此值设置为“11”或更高允许系统在Android 3.0或更高版本上运行时将新的默认主题(Holo)应用于您的应用,并在大屏幕上运行时禁用屏幕兼容模式(因为支持API) 11级隐含支持更大的屏幕)。

根据您为此属性设置的值,系统可以启用许多兼容性行为。其中一些行为由Build.VERSION_CODES参考中的相应平台版本描述。

要在每个Android版本中维护您的应用程序,您应该增加此属性的值以匹配最新的API级别,然后在相应的平台版本上彻底测试您的应用程序。

引入于:API Level 4

android:maxSdkVersion

一个整数,指定应用程序运行的最大API级别。

在Android 1.5,1.6,2.0和2.0.1中,系统在安装应用程序时以及在系统更新后重新验证应用程序时检查此属性的值。在任何一种情况下,如果应用程序的maxSdkVersion属性低于系统本身使用的API级别,则系统将不允许安装应用程序。在系统更新后重新验证的情况下,这会有效地从设备中删除您的应用程序。

要说明此属性在系统更新后如何影响您的应用程序,请考虑以下示例:

在Google Play上发布了在其清单中声明maxSdkVersion =“5”的应用程序。设备运行Android 1.6(API级别4)的用户下载并安装应用程序。几周后,用户会收到Android 2.0(API级别5)的无线系统更新。安装更新后,系统会检查应用程序的maxSdkVersion并成功重新验证它。应用程序正常运行。但是,一段时间后,设备会收到另一个系统更新,这次是针对Android 2.0.1(API级别6)。更新后,系统无法再重新验证应用程序,因为系统自身的API级别(6)现在高于应用程序支持的最大值(5)。系统会阻止应用程序对用户可见,实际上将其从设备中删除。

警告:不建议声明此属性。首先,没有必要将属性设置为阻止将应用程序部署到Android平台的新版本上的方法。根据设计,该平台的新版本完全向后兼容。您的应用程序应该在新版本上正常运行,前提是它只使用标准API并遵循开发最佳实践。其次,请注意,在某些情况下,声明属性可能会导致在系统更新到更高的API级别后将应用程序从用户的设备中删除。大多数可能安装应用程序的设备将通过无线方式定期进行系统更新,因此在设置此属性之前,应考虑它们对应用程序的影响。

引入于:API Level 4

什么是API级别?


API Level是一个整数值,用于唯一标识Android平台版本提供的框架API修订版。

Android平台提供了一个框架API,应用程序可以使用它与底层Android系统进行交互。框架API包括:

  • 一组核心包和类
  • 用于声明清单文件的XML元素和属性集
  • 用于声明和访问资源的一组XML元素和属性
  • 一组意图
  • 应用程序可以请求的一组权限,以及系统中包含的权限强制执行

Android平台的每个连续版本都可以包含其提供的Android应用程序框架API的更新。

设计框架API的更新,以便新API与早期版本的API保持兼容。也就是说,API中的大多数更改都是附加的,并引入了新功能或替代功能。随着API的某些部分升级,旧的替换部件已弃用但未被删除,因此现有应用程序仍可使用它们。在极少数情况下,可以修改或删除API的一部分,尽管通常只需要这些更改来确保API稳健性和应用程序或系统安全性。早期版本中的所有其他API部件无需修改即可继续使用。

Android平台提供的框架API使用称为“API级别”的整数标识符指定。每个Android平台版本仅支持一个API级别,但支持是所有早期API级别(低至API级别1)的隐含。 Android平台的初始版本提供了API级别1,后续版本增加了API级别。

下表指定了每个Android平台版本支持的API级别。有关运行每个版本的设备的相对数量的信息,请参阅“平台版本”仪表板页面。

Android中API级别的使用


API级别标识符在确保用户和应用程序开发人员获得最佳体验方面发挥着关键作用:

  • 它允许Android平台描述它支持的最大框架API修订版
  • 它允许应用程序描述它们所需的框架API修订版
  • 它允许系统协商用户设备上的应用程序安装,以便不安装与版本不兼容的应用程序。

每个Android平台版本都在Android系统内部存储其API级别标识符。

应用程序可以使用框架API提供的清单元素 - <uses-sdk> - 来描述它们能够运行的最低和最高API级别,以及它们旨在支持的首选API级别。该元素提供三个关键属性:

  • android:minSdkVersion - 指定应用程序能够运行的最低API级别。默认值为“1”。
  • android:targetSdkVersion - 指定应用程序运行的API级别。在某些情况下,这允许应用程序使用目标API级别中定义的清单元素或行为,而不是仅限于使用为最低API级别定义的清单元素或行为。
  • android:maxSdkVersion - 指定应用程序能够运行的最大API级别。重要提示:在使用此属性之前,请阅读<uses-sdk>文档。

例如,要指定应用程序运行所需的最低系统API级别,应用程序将在其清单中包含带有android:minSdkVersion属性的<uses-sdk>元素。 android:minSdkVersion的值将是对应于应用程序可以运行的最早版本Android平台的API级别的整数。

当用户尝试安装应用程序或在系统更新后重新验证应用程序时,Android系统首先检查应用程序清单中的<uses-sdk>属性,并将这些值与其自己的内部API级别进行比较。只有满足以下条件,系统才允许安装:

  •   如果声明了android:minSdkVersion属性,则其值必须小于或等于系统的API Level整数。如果未声明,则系统假定应用程序需要API级别1。
  • 如果声明了android:maxSdkVersion属性,则其值必须等于或大于系统的API Level整数。如果未声明,则系统假定应用程序没有最大API级别。有关系统如何处理此属性的更多信息,请阅读<uses-sdk>文档。

在应用程序的清单中声明时,<uses-sdk>元素可能如下所示:

<manifest>
  <uses-sdk android:minSdkVersion="5" />
  ...
</manifest>

应用程序在android:minSdkVersion中声明API级别的主要原因是告诉Android系统它正在使用在指定的API级别中引入的API。如果应用程序以某种方式安装在具有较低API级别的平台上,那么当它尝试访问不存在的API时,它将在运行时崩溃。如果应用程序所需的最低API级别高于目标设备上的平台版本,则系统会通过不允许安装应用程序来防止此类结果。

例如,android.appwidget包是在API Level 3中引入的。如果应用程序使用该API,则必须声明一个值为“3”的android:minSdkVersion属性。然后,该应用程序可以安装在Android 1.5(API Level 3)和Android 1.6(API Level 4)等平台上,但不能安装在Android 1.1(API Level 2)和Android 1.0平台(API Level 1)上。

有关如何指定应用程序的API级别要求的更多信息,请参阅清单文件文档的<uses-sdk>部分。

发展考虑因素


以下部分提供了在开发应用程序时应考虑的API级别相关信息。

应用向前兼容性

Android应用程序通常与新版本的Android平台向前兼容。

由于几乎所有对框架API的更改都是附加的,因此使用任何给定版本的API(由其API级别指定)开发的Android应用程序与更高版本的Android平台和更高的API级别向前兼容。应用程序应该能够在Android平台的所有更高版本上运行,除非在应用程序使用稍后因某种原因删除的API的一部分的独立情况下。

前向兼容性非常重要,因为许多Android驱动的设备都会收到无线(OTA)系统更新。用户可以安装您的应用程序并成功使用它,然后再接收新版Android平台的OTA更新。安装更新后,您的应用程序将在环境的新运行时版本中运行,但具有应用程序所依赖的API和系统功能。

在某些情况下,API下面的更改(例如底层系统本身的更改)可能会影响您在新环境中运行的应用程序。因此,作为应用程序开发人员,了解应用程序在每个系统环境中的外观和行为方式非常重要。为了帮助您在各种版本的Android平台上测试您的应用程序,Android SDK包含您可以下载的多个平台。每个平台都包含一个兼容的系统映像,您可以在AVD中运行该映像以测试您的应用程序。

应用向后兼容性

Android应用程序不一定与Android平台的版本向后兼容,而不是与编译它们的版本相比。

每个新版本的Android平台都可以包含新的框架API,例如那些使应用程序可以访问新平台功能或替换现有API部件的API。当在新平台上运行时,应用程序可以访问新API,并且如上所述,在API级别指定的平台的更高版本上运行时也是如此。相反,由于平台的早期版本不包含新API,因此使用新API的应用程序无法在这些平台上运行。

虽然Android驱动的设备不太可能降级到该平台的先前版本,但重要的是要意识到该领域可能有许多设备运行早期版本的平台。即使在接收OTA更新的设备中,有些设备可能会滞后,并且可能无法在相当长的时间内收到更新。

选择平台版本和API级别

在开发应用程序时,您需要选择要编译应用程序的平台版本。通常,您应该针对应用程序可以支持的最低版本的平台编译应用程序。

您可以通过针对连续较低的构建目标编译应用程序来确定可能的最低平台版本。确定最低版本后,应使用相应的平台版本(和API级别)创建AVD并完全测试应用程序。确保在应用程序的清单中声明了android:minSdkVersion属性,并将其值设置为平台版本的API级别。

声明最低API级别

如果您构建的应用程序使用最新平台版本中引入的API或系统功能,则应将android:minSdkVersion属性设置为最新平台版本的API级别。这可确保用户只有在设备运行兼容版本的Android平台时才能安装应用程序。反过来,这可以确保您的应用程序可以在其设备上正常运行。

如果您的应用程序使用最新平台版本中引入的API但未声明android:minSdkVersion属性,那么它将在运行最新版本平台的设备上正常运行,但不能在运行早期版本平台的设备上运行。在后一种情况下,当应用程序尝试使用早期版本中不存在的API时,应用程序将在运行时崩溃。

针对更高的API级别进行测试

编译应用程序后,应确保在应用程序的android:minSdkVersion属性中指定的平台上进行测试。为此,请创建一个使用应用程序所需平台版本的AVD。此外,为了确保向前兼容性,您应该在使用比应用程序使用的API级别更高的API级别的所有平台上运行和测试应用程序。

Android SDK包含您可以使用的多个平台版本,包括最新版本,并提供可用于下载其他平台版本的更新程序工具。

要访问更新程序,请使用位于<sdk> / tools目录中的android命令行工具。您可以通过执行android sdk来启动SDK更新程序。您也可以简单地双击android.bat(Windows)或android(OS X / Linux)文件。

要在模拟器中针对不同平台版本运行应用程序,请为要测试的每个平台版本创建AVD。有关AVD的更多信息,请参阅创建和管理虚拟设备。如果您使用物理设备进行测试,请确保您了解其运行的Android平台的API级别。有关平台版本及其API级别的列表,请参阅本文档顶部的表格。

按API级别过滤参考文档


Android Developers网站上的参考文档页面在每个页面的右上角区域提供“按API级别过滤”控件。您可以使用该控件仅显示应用程序实际可访问的API部分的文档,具体取决于它在清单文件的android:minSdkVersion属性中指定的API级别。

要使用过滤,请选中复选框以启用过滤,就在页面搜索框的下方。然后将“按API级别过滤”控件设置为与应用程序指定的API级别相同的API级别。请注意,在以后的API级别中引入的API会变灰并且其内容会被屏蔽,因为您的应用程序无法访问它们。

按文档中的API级别过滤并未提供每个API级别中新增或引入的内容的视图 - 它只是提供了一种查看与给定API级别关联的整个API的方法,同时排除了在以后的API级别中引入的API元素。

如果您决定不想过滤API文档,只需使用复选框禁用该功能。默认情况下,禁用API级别过滤,以便您可以查看完整的框架API,无论API级别如何。

另请注意,各个API元素的参考文档指定了引入每个元素的API级别。包和类的API级别在每个文档页面的内容区域的右上角指定为“自<api level>”。类成员的API级别在其详细描述标题中指定,位于右边距。

猜你喜欢

转载自blog.csdn.net/weixin_42703445/article/details/83746775
今日推荐