uses-sdk

    说明:本文是从android开发官网翻译而来,如有不当之处,请大家指正。(原文网址:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#uses)

     一、android:minSdkVersion、android:targetSdkVersion、android:maxSdkVersion概述

    1.语法

 android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />
    2. 说明

    (1)android:minSdkVersion

     minSdkVersion属性是一个整数,它描述了所开发应用程序正常运行所需要的最低的API版本级别。如果android系统的API级别低于应用程序所要求的最低版本,那么系统将不允许该程序安装。

    注意:如果开发程序时未设置minSdkVersion属性,该属性默认值为1,这就表示你所开发的程序与所有版本的android系统兼容。如果你的程序事实上并非与所有版本的android系统兼容(比如程序事实上的最低版本要求是3),而你又未设置minSdkVersion属性,刚好你的程序被安装在了一个API级别低于3的系统里,该程序运行期间试图访问android系统里不可用的APIs时,将会崩溃。因此,开发程序时,一定要给minSdkVersion属性设置合适的API级别。

    (2)android:targetSdkVersion

    targetSdkVersion属性是一个整数,它是程序将来运行的目标android系统的API级别

    targetSdkVersion属性告诉android系统,程序在该版本API的平台上已经过充分测试,不必开启兼容性判断以保证其的向前兼容性。程序还可以在较老版本的api系统上运行(必须高于minSdkVersion指定的版本

    (3)android:maxSdkVersion

   targetSdkVersion属性是一个整数,它描述了所开发应用程序正常运行所需要的最高的API版本级别。该属性不推荐设置。

    二、什么是API级别

    API级别是一个整数,它唯一标识了某一个版本的android平台所提供的api版本。android平台提供了一套api,程序可以通过调用该api实现与底层android系统互动。api由以下内容构成:

    (1)一个包和类的核心集

    (2)一个声明manifest文件的xml元素和属性集

    (3)一个声明和访问资源的xml元素和属性集

    (4)一个intents集

    (5)一个程序可以请求和强制执行的权限集

    每一个android平台的后继版本都对其api进行了一定的升级。升级后的api保留了与老版本api的兼容性,因为api的大部分变动都是附加性的,引入新的和替代性的功能。虽然api中部分内容被升级,部分内容被弃用,但是这部分内容并未被删除,这样做是为了保证之前用这部分api写的程序能正常运行。在极少数情况下,api的部分内容被修改或删除,这样做是为了保证api的健壮性和程序及系统的安全性。

    android平台提供的api版本用一个整数标识进行描述,该整数标识即是api级别。每一个版本的android平台提供唯一一个版本的api,但是对所有早期的api(包括级别为1的api)均提供隐形的支持。最初的android平台提供的api级别为1,后续发行的版本级别依次递增。

    android平台版本与其提供的api级别对照如下表:


    程序可以通过api提供的manifest元素来描述其正常运行所需要的最低和最高api级别,以及其运行的最佳api级别。api提供三个主要属性实现上述功能:minSdkVersion、targetSdkVersion、maxSdkVersion。当用户安装应用程序时,或者升级android系统后重新验证程序时,系统首先检查minSdkVersion和maxSdkVersion属性值,并将属性值与自身的api级别进行对比。对比结果只有满足下面两个条件时,程序才被允许安装或者通过验证:

    (1)如果声明了minSdkVersion属性值,系统的api级别必须与该属性值相等或者比该属性值大。如果未声明minSdkVersion属性值,该属性值默认为1.

    (2)如果声明了maxSdkVersion属性值,系统的api级别必须与该属性值相等或者比该属性值小。如果未声明maxSdkVersion属性值,系统假定该程序没有最大api级别要求。

    三、思考

    1. 程序的向兼容性

    android应用程序一般实现了与新版android平台的前向兼容。因为几乎所有的api变动都是附加性的,使用任何给定版本的api开发的应用程序都可以与更新版本的android平台和更高级别的api保持兼容。应用程序应该可以在所有后继版本的android平台上运行,除非个别情况下应用程序使用了后继版本中被删除了的api功能。

    2. 程序的后向兼容性

    程序没有必要与老版本的android平台(比编译程序的平台的api版本更老)保持兼容。

    3. 选择平台版本和api级别

    当你在开发android应用程序时,应该选定一个版本的平台用于编译程序。一般情况下,应该选择一个尽可能低版本的且你的程序支持的平台来进行编译程序。你可以采用“依次使用更低版本的平台编译程序”的方法来确定尽可能低的平台版本。确定最低版本后,你应使用与其一致的平台版本(和对应的api级别)构建一个avd,对程序进行充分的测试。请务必设置manifest中的minSdkVersion属性值,使其与上述版本平台的api级别一致。

    4. 声明最低api级别

    如果你的应用程序中使用了最新版本平台引入的apis或系统功能,你应该将minSdkVersion属性值设置为最新版平台的api级别。这保证了你的应用程序只有在装有兼容版本android系统的设备上才能安装。反过来,也保证了你的程序能在他们的设备上正常运行。

    如果你的应用程序中使用了最新版本平台引入的apis,而没有声明minSdkVersion属性值,那么你的程序在装有最新版本android平台的设备上能正常运行,但是在装有更早版本android平台的设备上不能。在后一种情况下,当程序在运行期间试图使用早期版本没有的api功能时,将会崩溃。

    5. 测试更高的api级别

    程序编译完成后,你应该保证在minSdkVersion属性值描述的版本的平台上对程序进行测试。为此,你应根据应用程序要求的该平台版本创建一个avd。另外,为了保证前向兼容性,你应在所有版本的平台(其api级别高于程序所用的api级别)上运行并测试该程序。为了在模拟器中针对不同的平台版本测试应用程序,请为每一个版本平台创建一个avd。

你可能感兴趣的:(uses-sdk)