<uses-sdk>

Google Play 使用您应用清单中声明的 <uses-sdk> 属性从不符合其平台版本要求的设备中筛选您的应用。在设置这些属性之前,请确保您了解 Google Play 筛选器.

语法
<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 版本兼容。如果不是,并且您没有声明正确的 minSdkVersion,那么在安装到具有不兼容 API 级别的系统上时,应用程序在运行时尝试访问不可用的 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 级别 4

android:maxSdkVersion
一个整数,指定应用程序设计运行的最高 API 级别。

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

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

在清单中声明 maxSdkVersion="5" 的应用程序在 Google Play 上发布。设备运行 Android 1.6(API 级别 4)的用户下载并安装了该应用程序。几周后,用户收到 Android 2.0(API 级别 5)的无线系统更新。更新安装后,系统检查应用程序的 maxSdkVersion 并成功地重新验证它。

应用程序按预期正常运行。但是,一段时间后,设备收到另一个系统更新,这次更新到 Android 2.0.1(API 级别 6)。更新后,系统无法再重新验证应用程序,因为系统的 API 级别(6)现在高于应用程序支持的最大级别(5)。系统阻止应用程序对用户可见,实际上从设备中删除了它。

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

引入于:API 级别 4

某些版本的 Android(高于 Android 2.0.1)在安装或重新验证期间不会检查或强制执行 maxSdkVersion 属性。但是,Google Play 在向用户展示可供下载的应用程序时,仍将此属性用作过滤器。
引入于
API 级别 1

什么是 API 级别?

API 级别是一个整数值,它唯一标识 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 级别。有关运行每个版本的设备的相对数量的信息,请参阅 分发仪表板.

平台版本API 级别VERSION_CODE注释
Android 15 35 VANILLA_ICE_CREAM 平台亮点
Android 14 34 UPSIDE_DOWN_CAKE 平台亮点
Android 13 33 TIRAMISU 平台亮点
Android 12 32 S_V2 平台亮点
31 S 平台亮点
Android 11 30 R 平台亮点
Android 10 29 Q 平台亮点
Android 9 28 P 平台亮点
Android 8.1 27 O_MR1 平台亮点
Android 8.0 26 O 平台亮点
Android 7.1.1
Android 7.1
25 N_MR1 平台亮点
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
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.4
Android 2.3.3
10 GINGERBREAD_MR1 平台亮点
Android 2.3.2
Android 2.3.1
Android 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

API 级别在 Android 中的用途

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

  • 它允许 Android 平台描述其支持的最大框架 API 版本。
  • 它允许应用程序描述它们需要的框架 API 版本。
  • 它允许系统协商应用程序在用户设备上的安装,以确保版本不兼容的应用程序不会安装。

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

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

  • android:minSdkVersion:应用程序能够运行的最低 API 级别。默认值为“1”。
  • android:targetSdkVersion:应用程序设计运行的 API 级别。在某些情况下,这允许应用程序使用在目标 API 级别中定义的清单元素或行为,而不是仅限于使用为最低 API 级别定义的元素或行为。
  • android:maxSdkVersion:应用程序能够运行的最高 API 级别。重要:在使用此属性之前,请阅读本页面的 有关此属性的信息

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

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

  • 如果声明了 android:minSdkVersion 属性,则其值小于或等于系统的 API 级别整数。如果没有声明,系统将假定应用程序需要 API 级别 1。
  • 如果声明了 android:maxSdkVersion 属性,则其值等于或大于系统的 API 级别整数。如果没有声明,系统将假定应用程序没有最大 API 级别。阅读 对该属性的描述,以了解有关系统如何处理它的更多信息。

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

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

应用程序在 android:minSdkVersion 中声明 API 级别的主要原因是告诉 Android 系统它使用的是在指定的 API 级别 _引入_ 的 API。

如果应用程序以某种方式安装在 API 级别较低的平台上,那么当它尝试访问不存在的 API 时,它将在运行时崩溃。系统通过在应用程序所需的最低 API 级别高于目标设备平台版本的 API 级别时不安装应用程序来防止这种情况发生。

开发注意事项

以下部分提供与开发应用程序时需要考虑的 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 平台参考文档页面在每个页面的左上角提供了一个“API 级别”控件。 您可以使用此控件仅显示应用程序实际可以访问的 API 部分的文档,这取决于其清单文件中的 android:minSdkVersion 属性中指定的 API 级别。

要使用筛选功能,请从菜单中选择应用程序指定的 API 级别。 然后,在更高 API 级别中引入的 API 将变灰,其内容将被屏蔽,因为您的应用程序无法访问它们。

在文档中按 API 级别进行筛选不会提供对每个 API 级别中新内容或引入内容的视图。 它提供了一种查看与给定 API 级别关联的整个 API 的方法,同时排除在更高 API 级别中引入的 API 元素。

要返回到查看完整文档,请在 API 级别菜单的顶部选择“REL”。 默认情况下,API 级别筛选功能处于禁用状态,因此您可以查看完整的框架 API,而无论 API 级别如何。

单个 API 元素的参考文档指定了引入每个元素的 API 级别。 包和类的 API 级别在每个文档页面内容区域的右上角以“Added in API level”的形式指定。 类成员的 API 级别在详细的描述标题中指定,位于右边缘。