当前位置: 代码迷 >> Android >> Android API Guides-App Manifest <uses-sdk> <uses-permission>
  详细解决方案

Android API Guides-App Manifest <uses-sdk> <uses-permission>

热度:641   发布时间:2016-04-24 11:07:45.0
Android API Guides---App Manifest <uses-sdk> <uses-permission>

<uses-sdk>

句法

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

<manifest>

描述:
让你表达一个应用程序与Android平台的一个或多个版本的兼容性,通过API级别整数手段。通过应用程序表达的API级别会相比,一个给定的Android系统的API级别,这可能不同的Android设备而异。
尽管它的名字,该元素用来指定的API级别,而不是SDK(软件开发工具包)的版本号或Android平台。 API级别始终是一个整数。不能得出从其关联的Android版本号的API级别(例如,它是不一样的主要版本或主要和次要版本的总和)。
还了解版本控制您的应用程序文件。
属性:

android:minSdkVersion

整数指定为运行应用程序所需的最低API级别。 Android系统会阻止用户安装应用程序,如果系统的API级别比该属性指定的值。你应该总是声明这个属性。
注意:如果你不声明这个属性,系统假定为“1”的默认值,这表示您的应用程序与Android的所有版本兼容。如果你的应用是不是所有版本(例如,它使用API等级3中引入的API)兼容,具有API级别小于3的系统上安装时,你还没有宣布正确的minSdkVersion,那么,该应用程序将在崩溃试图访问不可用的API时运行时。出于这个原因,一定要声明在的minSdkVersion属性相应的API级别。

android:targetSdkVersion

个整数指定的API级别的应用程序的目标。如果没有设置,默认值等于该给的minSdkVersion。
此属性通知您已经对目标版本和系统不应使任何兼容的行为,以保持与目标版本的应用程序的向前兼容性测试系统。该应用程序仍然可以在旧版本上运行(向下的minSdkVersion)。


由于Android的每个新版本的发展,一些行为,甚至出现可能会改变。但是,如果平台的API级别比你的应用程序的targetSdkVersion所声明的版本时,系统会启用兼容的行为,以确保您的应用程序继续工作,你期望的方式。您可以通过指定targetSdkVersion来匹配它的运行平台的API级别禁用这种兼容性的行为。例如,在Android 3.0或更高版本上运行时还会禁用屏幕兼容模式在更大的屏幕上运行时(将该值设置为“11”或更高允许系统应用一个新的默认主题(河洛),以您的应用程序,因为API支持11级隐含支持更大的屏幕)。


有迹象表明,该系统可以使基于您为此属性设置的值很多兼容性的行为。几个这些行为是由在Build.VERSION_CODES参考相应平台的版本中描述。


为了保持与每个版本的Andr??oid沿着你的应用程序,您应该增加这个属性来匹配最新的API级别的值,然后在相应的平台版本进行全面测试您的应用程序。


介绍了:API级别4

android:maxSdkVersion

一个整数,指定该应用程序被设计为运行的最大API级别。
在Android 1.5的,1.6,2.0和2.0.1,系统中安装一个应用程序时重新验证系统更新后的应用程序时,检查此属性的值。在这两种情况下,如果应用程序的的minSdkVersion属性是比由该系统本身所使用的API级别较低,则系统将不会允许安装该应用程序。在系统更新后,再验证的情况下,这有效地将删除设备应用程序。
为了说明这个属性怎么能系统更新后会影响您的应用程序,考虑下面的例子:
在其清单申报的minSdkVersion =“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级别4
Android的未来版本(Android的超越2.0.1)将不再检查或安装过程中执行maxSdkVersion属性或重新验证。谷歌Play将继续使用属性作为过滤器,但是,随着可供下载的应用程序用户展示时。

什么是API级别?


API级别是一个整数值,它唯一标识一个版本的Andr??oid平台所提供的框架API版本。


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


一套核心包和类
一种声明manifest文件组XML元素和属性
一个声明和访问资源组XML元素和属性
一组的意图
一组权限程序能够请求,以及允许执行进包括在系统中
Android平台的后续版本可以包括更新Android应用程序框架的API,它提供。


更新到框架的API被设计,以使新的API保持与较早版本的API兼容。也就是说,在API中大多数都是添加剂和引入新的或替换功能。作为API的部分升级,老替换的部分已被弃用,但不会被删除,从而使现有的应用程序仍然可以使用它们。在极少数的情况下,该API的部分可以被修改或删除,尽管仅需要典型地这样的改变,以确保API鲁棒性和应用程序或系统的安全性。从早期版本的所有其他API部分结转无需修改。


该框架API,一个Android平台提供使用称为“API级别”的整数标识符指定。每一个Android平台的版本完全相同支持一个API水平,虽然支持是隐含的所有早期的API级别(最低API级别1)。 Android平台的初始版本提供的API Level 1和后续版本都增加了API级别。


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

Platform VersionAPI LevelVERSION_CODENotes
Android 6.023MAPI Changes
Android 5.122LOLLIPOP_MR1Platform Highlights
Android 5.021LOLLIPOP
Android 4.4W20KITKAT_WATCHKitKat for Wearables Only
Android 4.419KITKATPlatform Highlights
Android 4.318JELLY_BEAN_MR2Platform Highlights
Android 4.2, 4.2.217JELLY_BEAN_MR1Platform Highlights
Android 4.1, 4.1.116JELLY_BEANPlatform Highlights
Android 4.0.3, 4.0.415ICE_CREAM_SANDWICH_MR1Platform Highlights
Android 4.0, 4.0.1, 4.0.214ICE_CREAM_SANDWICH
Android 3.213HONEYCOMB_MR2 
Android 3.1.x12HONEYCOMB_MR1Platform Highlights
Android 3.0.x11HONEYCOMBPlatform Highlights
Android 2.3.4
Android 2.3.3
10GINGERBREAD_MR1Platform Highlights
Android 2.3.2
Android 2.3.1
Android 2.3
9GINGERBREAD
Android 2.2.x8FROYOPlatform Highlights
Android 2.1.x7ECLAIR_MR1Platform Highlights
Android 2.0.16ECLAIR_0_1
Android 2.05ECLAIR
Android 1.64DONUTPlatform Highlights
Android 1.53CUPCAKEPlatform Highlights
Android 1.12BASE_1_1 
Android 1.01BASE 
在Android的API级别的使用


API级别标识用于确保用户和应用程序开发者提供最佳体验了关键作用:


它可以让Android平台形容它支持的最大API框架版本
它可以让应用程序描述他们需要的框架API版本
它让系统协商的用户的设备上的应用程序,使得版本不兼容的应用程序没有安装安装。
每一个Android平台版本内部存储的API级别标识,Android系统本身。


应用程序可以使用由框架API提供一个清单元素 - <用途-SDK> - 来描述的最小和下它们能够运行最大API级别,以及它们被设计为支持优选API级别。元素提供了三个关键属性:


安卓的minSdkVersion - 指定该应用程序能够运行的最低API级别。默认值是“1”。
机器人:targetSdkVersion - 指定该应用程序被设计为运行API级别。在某些情况下,这允许使用在目标API级别限定,而不是被限制于只使用的最小API级别定义清单元素或行为的应用程序。
机器人:maxSdkVersion - 指定该应用程序能够运行的最大API级别。重要提示:使用此属性前,请阅读<用途-SDK>文档。
例如,要指定一个应用程序需要为了运行的最低系统API级别,应用程序将在其清单的<使用-SDK>了Android元素:属性的minSdkVersion。机器人的价值:的minSdkVersion是相应于Android平台下应用程序可以运行的最早版本的API级别整数。


当用户试图安装一个应用程序或系统更新后重新验证的参加办法时,Android系统首先检查<使用-SDK>在应用程序的清单属性和值对自己的内部API级别进行比较。该系统允许,如果这些条件得到满足,安装才开始:


如果一个机器人:的minSdkVersion属性被声明,其值必须小于或等于系统的API级别整数。如果没有声明,系统假定应用程序需要API等级1。
如果一个机器人:maxSdkVersion属性声明,其值必须大于系统的API级别整数等于或更大。如果没有声明,系统假定应用程序没有最大的API级别。有关系统如何处理这个属性的更多信息,请阅读<用途-SDK>文档。
当在应用程序的清单中声明,一个<用途-SDK>元素可能是这样的:

<manifest>  <uses-sdk android:minSdkVersion="5" />  ...</manifest>
主要的原因,应用程序将在声明的android的API级别:是的minSdkVersion告诉它使用指定的API级别引入的API的Andr??oid系统。如果该应用程序是与低级API级别的平台上不知何故安装,那么这将在运行时崩溃时,它试图访问不存在的API。该系统可以防止这样的结果通过不允许如果它要求的最低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级别要求的详细信息,请参阅清单文件文档的<用途-SDK>部分。


发展的几点思考


下面的部分提供与开发应用程序时,你应该考虑的API级别的信息。


应用向前兼容性


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


因为几乎所有的框架API的变化是叠加的,Android应用程序使用API??(通过其API级别指定)的任一特定版本开发的是更高版本的Andr??oid平台和较高的API级别向前兼容。该应用程序应该能够在所有更高版本的Andr??oid平台上运行,除非在应用程序使用的是后来出于某种原因删除了API的一部分孤例。


因为很多Android装置接收通过空中下载(OTA)系统更新前向兼容性是非常重要的。用户可以安装应用程序,并成功地使用它,后来收到OTA更新到Android平台的新版本。一旦安装了更新,你的应用程序将在环境的新的运行时版本上运行,但一个有你的应用程序依赖于API和系统能力。


在某些情况下,当在新的环境中运行的变化的API如下,例如那些在底层系统本身,可能会影响应用程序。出于这个原因对你来说这很重要,因为应用程序开发人员,了解应用程序的外观和在每个系统中的环境行为。为了帮助您测试您对Android平台的各种版本的应用程序,Android SDK中包含多个平台,您可以下载。每个平台都包括您可以在AVD运行,以测试你的应用程序兼容的系统映像。


应用向后兼容性


Android应用程序不一定与Android平台比对,他们被编译的版本旧版本的向后兼容。


Android平台的每个新版本包括新的框架API,例如,让应用程序能够访问新的平台功能,或替换现有的API部分。在新的平台上运行时,如上所述,还对平台的更高版本上运行时,由API级别指定的新API是应用程序访问。相反,因为早期版本的平台不包括新的API,使用新的API应用程序无法在这些平台上运行。


虽然这是不太可能的Andr??oid设备将被降级到以前版本的平台,它认识到,有可能是在该领域的许多设备运行早期版本的平台是很重要的。接收OTA更新设备之间甚至,有些人可能会滞后,并且可能不接收更新的时间显著量。


选择一个平台版本和API等级


当您正在开发的应用程序,你需要选择的平台版本针对您将编译应用程序。一般情况下,你应该编译你对你的应用程序可以支持该平台的最低版本的应用程序。


您可以通过对连续降低构建目标编译应用程序确定尽可能低的平台版本。您确定最低版本后,你应该使用相应平台版本(和API级别)创建AVD并充分测试应用程序。确保申报安卓:在应用程序的清单的minSdkVersion属性并将其值设置为平台版本的API级别。


声明最低API级别


如果你建立一个使用最新平台版本中引入的API或系统功能的应用程序,你应该设置安卓的minSdkVersion属性的最新平台版本的API级别。这可确保用户将只能如果他们的设备运行Android平台的兼容版本安装应用程序。反过来,这可以确保您的应用程序可以在其设备上正常运行。


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


测试针对高层次API


编译应用程序后,你应该确保测试它在应用程序的Andr??oid指定的平台上:的minSdkVersion属性。要做到这一点,创建一个使用应用程序所需的平台版本的AVD。此外,为了确保向前兼容性,您应该运行和测试在使用比你的应用程序使用较高的API级别的所有平台中的应用。


Android SDK中包含多个平台版本,您可以使用,包括最新版本,并提供了一??个更新的工具,你可以用它来下载其他平台的版本是必要的。


要访问更新,使用android命令行工具,位于<SDK> / tools目录。你可以通过执行Android SDK中启动SDK更新。您也可以简单地双击android.bat(Windows)或机器人(OS X / Linux)的文件。在ADT,你还可以通过选择Window> Android SDK中管理器中访问的更新。


要运行你对在模拟器中不同平台版本的应用程序,请为您希望测试各平台版本的AVD。有关自动真空淀积系统的更多信息,请参阅创建和管理虚拟设备。如果您在使用用于测试的物理设备,请确保您知道它运行Android平台的API级别。请参阅下表在这个文件的顶部平台的版本和API级别的列表。


通过过滤API级别的参考文档


Android开发者网站的参考文档页面提供了一个控制“的API级别过滤器”在每个页面的右上角区域。您可以使用控制,只对那些对你的应用程序实际上访问的部分API,基于它指定在Android的API级别显示文档:它的manifest文件的minSdkVersion属性。


要使用过滤,选择复选框启用过滤,略低于网页搜索框。然后由您的应用程序指定的设置控制“的API级别过滤器”相同的API级别。请注意,在以后的API级别的API介绍,然后变灰,其内容被屏蔽,因为他们不会给你的应用程序访问。


过滤的文档中的API级别并没有提供什么新的或在每个API级别推出了看法 - 它只是提供了一种方法来查看与给定的API级别相关联的整个API,同时排除在以后的API级别推出的API元素。


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


还要注意的是个人的API元素的参考文档指定在介绍每个元素的API级别。包和类API级别被指定为“自<API级别>”在每个文档页面上的内容区域的右上角。类成员的API级别在它们的详细描述头部被指定,在右边缘。

<uses-permission>

句法

<uses-permission android:name="string"        android:maxSdkVersion="integer" />
包含于

<manifest>

描述:
请求应用程序必须按顺序给予它正确操作的权限。权限由用户授予在安装应用程序的时候,而不是在它的运行。
有关权限的详细信息,请参阅介绍和独立的安全性和权限文档权限部分。由基础平台定义的权限列表可以在android.Manifest.permission找到。


属性:

android:name

权限的名称。它可以是标准的系统的权限,例如“android.permission.CAMERA”或“android.permission.READ_CONTACTS”之一由应用与<权限>元素中定义的许可,由另一个应用程序中定义的许可,或。由于这些例子表明,一个权限名称通常包括作为前缀的包名。

android:maxSdkVersion

最高API级别在此权限应授予您的应用程序。设置该属性,如果你的应用程序需要的权限不再需要在一定的API级别开始是非常有用的。
例如,一开始用的是Android 4.4(API等级19),它不再需要时,您的应用程序要写入外部存储自己的应用程序特定的目录,你的应用程序请求WRITE_EXTERNAL_STORAGE许可(由getExternalFilesDir提供的目录()) 。然而,需要API级别18和较低的权限。所以,你可以声明此权限只需要到一个声明,如该API级别18:

<uses-permission     android:name="android.permission.WRITE_EXTERNAL_STORAGE"     android:maxSdkVersion="18" />

  相关解决方案