什么是 API 级别?

API 级别是一个对 Android 平台版本提供的框架 API 修订版进行唯一标识的整数值。

Android 平台提供了一种框架 API,应用可利用它与底层 Android 系统进行交互。

该框架 API 由以下部分组成:

一组核心软件包和类

一组用于声明清单文件的 XML 元素和属性

一组用于声明和访问资源的 XML 元素和属性

一组 Intent

一组应用可请求的权限,以及系统中包括的权限强制执行。

每个后续版本的 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 级别在 Android 中的使用

API 级别标识符在确保尽可能为用户和应用开发者提供最佳体验方面发挥着重要作用:它允许 Android 平台描述其支持的最高框架 API 修订版

它允许应用描述其需要的框架 API 修订版

它允许系统协商应用在用户设备上的安装,从而不安装不兼容版本的应用。

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

应用可以利用框架 API 提供的清单元素 () 来说明其可以运行的最低和最高 API 级别,以及其在设计上支持的首选 API 级别。

该元素具有以下三个重要属性:

android:minSdkVersion - 指定能够运行应用的最低 API 级别。

默认值为“1”。

android:targetSdkVersion - 指定运行应用的目标 API 级别。

在某些情况下,这允许应用使用在目标 API 级别中定义的清单文件元素或行为,而不是仅限于使用那些针对最低 API 级别定义的元素。

android:maxSdkVersion - 指定能够运行应用的最高 API 级别。

重要说明:在使用该属性之前,请先阅读 文档。

例如,要指定应用运行所需的最低系统 API 级别,应用需要在其清单中加入一个带 android:minSdkVersion 属性的 元素。

android:minSdkVersion 是一个整数值,对应于能够运行应用的最低版本 Android 平台的 API 级别。

当用户试图安装应用,或在系统更新后重新验证应用时,Android 系统会先检查应用清单中的 属性,然后将这些属性的值与其自己的内部 API 级别进行对比。

只有在符合以下条件时,系统才允许安装开始:

如果声明了 android:minSdkVersion 属性,其值必须小于或等于系统的 API 级别整数。

如果未声明,则系统假定应用需要 API 级别 1。

如果声明了 android:maxSdkVersion 属性,其值必须大于或等于系统的 API 级别整数。如果未声明,则系统假定应用没有最高 API 级别。

如需了解有关系统如何处理该属性的详细信息,请阅读 文档。

如果在应用清单中进行了声明, 元素的内容可能如下所示:

...

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

如果由于某种原因将应用安装在 API 级别更低的平台上,则它会在运行时试图访问不存在的 API 时发生崩溃。系统通过在应用需要的最低 API 级别高于目标设备上的平台版本时不允许安装应用来防止出现这种结果。

例如,android:minSdkVersion 属性。

随后,应用便可安装在 Android 1.5(API 级别 3)和 Android 1.6(API 级别 4)等平台上,但不能安装在 Android 1.1(API 级别 2)和 Android 1.0(API 级别 1)平台上。

如需了解有关如何指定应用 API 级别要求的详细信息,请参阅清单文件文档的 部分。

开发注意事项

下文提供有关您在开发应用时应该考虑的 API 级别的信息。

应用向前兼容性

Android 应用一般向前兼容新版本的 Android 平台。

因为几乎所有对框架 API 的更改都是新增更改,所以使用 API 任何给定版本(其 API 级别所指定版本)开发的 Android 应用均向前兼容更新版本的 Android 平台以及更高 API 级别。

应用应该能够在所有后期版本的 Android 平台上运行,除非在个别情况下应用使用的某个 API 部分后来由于某种原因被移除。

向前兼容性很重要,因为许多 Android 设备都接收 OTA 系统更新。

用户可以安装您的应用并顺利使用,然后通过接收 OTA 更新升级到新版本的 Android 平台。

安装更新后,您的应用将运行在新运行时版本的环境中,但这个版本具有您的应用所依赖的 API 和系统功能。

在某些情况下,在该 API 之下所做的更改(例如对底层系统本身的更改)可能会影响运行在新环境中的应用。

因此,作为应用开发者,您必须了解应用在各系统环境中的外观和行为。

为帮助您在各种版本的 Android 平台上测试您的应用,Android SDK 提供了多个可供您下载的平台。每个平台都包括一个兼容的系统映像,您可以在 AVD 中运行该映像来测试您的应用。

应用向后兼容性

Android 应用不一定向后兼容比其编译时所针对的目标版本更久远的 Android 平台版本。

每个新版本的 Android 平台都可能包括新的框架 API,例如那些能够让应用使用新的平台功能或者替换现有 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 提供了多个可供您使用的平台版本(包括最新版本),并提供了可供您在必要时下载其他平台版本的更新器工具。

要访问该更新器,请使用位于 /tools 目录的 android 命令行工具。

您可以通过执行 android sdk 来启动 SDK 更新器。

您还可以直接双击 android.bat (Windows) 或 Android (OS X/Linux) 文件。

要在模拟器中于不同平台版本上运行您的应用,请为您想测试的每个平台版本创建一个 AVD。

如需了解有关 AVD 的详细信息,请参阅创建和管理虚拟设备。

如果您要使用物理设备进行测试,请确保您知晓它所运行的 Android 平台的 API 级别。

请参阅本文顶部表格中所列的平台版本及其 API 级别。

按 API 级别过滤参考文档

Android Developers 网站在每个参考文档页面的右上角提供了一个“Filter by API Level”控件。

您可以利用该控件,根据应用在其清单文件的 android:minSdkVersion 属性中指定的 API 级别,只显示您的应用实际可以访问的 API 部分的对应文档。

要使用过滤,请选择用于启用过滤的复选框,该复选框就在页面搜索框下方。

然后将“Filter by API Level”控件设置为您的应用所指定的同一 API 级别。

请注意,后期 API 级别中引入的 API 随即灰显,并且其内容会被屏蔽,因为您的应用无法访问它们。

在文档中按 API 级别进行过滤并不能让您查看每个 API 级别新增或引入的 API - 它仅仅是提供了一种途径,让您能够查看与给定 API 级别关联的整个 API,同时将后期 API 级别中引入的 API 元素排除在外。

如果您决定不想过滤 API 文档,只需使用复选框停用该功能。

默认情况下系统会停用 API 级别过滤,这样无论 API 级别如何,您都能查看完整的框架 API。

还请注意,各 API 元素的参考文档指定的是引入各元素的 API 级别。

软件包和类的 API 级别在各文档页面内容区域的右上角以“Since ”形式指定。

类成员的 API 级别在其位于右边距的详细说明标头中指定。

android手机api等级_什么是Android API 级别?相关推荐

  1. android手机用户,ZDC:2011年Android手机用户使用行为研究报告

    一.市场概述及研究背景 谷歌Android,自获得摩托罗拉.三星.HTC.中兴.华为等诸多品牌的拥趸开始,就扮演起了智能手机市场竞争格局颠覆者的角色.经过近三年时间的发展,Gartner最新数据显示, ...

  2. Android手机ROM定制初级教程以及Android系统文件夹结构介绍【转】

    Android手机ROM定制初级教程以及Android系统文件夹结构介绍 一个完整的OM根目录会有以下几个文件夹及文件: data META-IN system boot.img  系统目录说明 1. ...

  3. 2019年1月Android手机性能榜,安兔兔发布:2019年1月Android手机性能榜_排行榜_安兔兔...

    今天,安兔兔根据后台统计到的数据,公布了2019年1月份国内Android手机性能榜单. 在2019年首月的榜单中,究竟哪些机型能够杀入前十名呢?一起来看看吧. 注:本文图表中的安兔兔跑分(v7版)均 ...

  4. android studio button位置_免费的Android开发环境

    Android Studio for mac是一个全面的Android开发环境,Android Studio帮助您设计,构建,测试和调试Android应用程序,利用Android Studio所有特色 ...

  5. android auto 能微信_想使用Android Auto系统你需要知道的11件事

    如果你想要在自己的汽车里使用Android Auto,但是又不知道从何做起.没关系,最近科技网站greenbot专门为我们详细介绍了使用Android Auto系统时应该知道的几件事,包括软件的内部运 ...

  6. mtk android手机 代码问题,MTK用户必备 Android手机也能系统恢复

    很多PC用户会在新装系统.驱动和常用软件之后进行Ghost备份,一旦系统异常直接恢复即可.实际上,Android手机也有类似的整套系统备份方法,让手机随时原地满血复活. 全局性的系统备份 可能有同学会 ...

  7. android手机常用功能,Windows Phone 7/Android手机常用功能对比

    据资讯网站Neowin报道,近日,微软发布了旗下手机操作系统平台WindowsPhone 7,智能手机领域的局势变得更加扑朔迷离.Neowin网站开辟专栏,就WP7和Android两大平台手机的诸多性 ...

  8. mac 重置 android手机系统,Mac OS X下Android系统华为手机无法连接问题之解决方案

    一般的android连接mac 很方便不用安装驱动就可以啦,可是不知道为什么特殊情况下有的android手机(小米2,华为等)就是连接不上,下来就说说特殊情况下如何连接. 使用USB连接安卓手机后可以 ...

  9. android手机固件升级原理,为什么常说Android手机千万别频繁的系统升级,背后的真实原因?...

    摘要:每次Android手机系统的新版本推送,都会让一些选择困难户纠结到底应不应该升级?有些安卓机友一想到更新系统之后的新体验不免心痒痒. 普通用户更适合使用官方推送的系统更新,但多数设备寿终就寝时也 ...

最新文章

  1. linux下mysql的root密码忘记解决方法
  2. leetcode--长按键入--python
  3. myeclipse mysql 乱码_MyEclipse与mysql增改查现乱码解决方案绝对有效
  4. Mysql 取用逗号分隔的字串的子串的方法:SUBSTRING_INDEX
  5. JAVA菜鸟入门HelloWorld
  6. jstat分析JVM内存
  7. ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作...
  8. javaweb中运用fileupload上传文件
  9. CF932E Team Work(第二类斯特林数)
  10. pfSense修改mbuf值
  11. 达梦数据库授权到期替换key文件
  12. 【LEACH协议】基于matlab实现无线传感器网络LEACH与DEEC协议
  13. axure网页预览_预览和导出HTML
  14. JSTree的基本用法
  15. 【佳学基因人工智能解码技术系列】在CENTOS环境下安装ANACOND
  16. css实现一段文字的两端分散对齐(兼容所有浏览器)
  17. python--字典、列表
  18. C语言输出100-1000之内所有的水仙花数字
  19. CSDN怎么转载别人的博客(转载)
  20. Unity3D中引用Spine2D动画研究学习(一)

热门文章

  1. 程序员面试中一面、二面、三面有什么区别?
  2. 多线程处理大量数据 java
  3. Possible solution: - Disable offline mode and rerun the build
  4. 【汇编】微机原理与接口技术课程设计
  5. C/C++程序固定单核CPU运行(几个示例)
  6. 【阿里云】阿里云跨账号内网互通
  7. 自控原理入门详解**********
  8. Talib中文文档(二):Momentum Indicators 动量指标
  9. 慧数纵览:日产在华三大工厂将减产30,000辆
  10. 路由器 设置DNS 域名拦截 重定向