AndroidManifest.xml中的minSdkVersion、targetSdkVersion、maxSdkVersion和project.properties中target API leve

2 篇文章 0 订阅

minSdkVersion、targetSdkVersion、targetApiLevel的区别

2011-10-10 17:19:51

————————————————————————————————————————————————

AndroidManifest.xml中的minSdkVersion、targetSdkVersion、maxSdkVersion和project.properties中target API level 四个数值区别 

 

新建工程的时候minSdk和target API level 是一致的

(1)minSdkVersion与maxSdkVersion :在安装程序的时候,如果目标设备的API版本小于minSdkVersion,

或者大于maxSdkVersion,程序将无法安装。一般来说没有必要设置maxSdkVersion。

(2) targetSdkVersion  :如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测试,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。   


(3)在project.properties中的target是指在编译的时候使用哪个版本的API进行编译。开发时工程SDK版本和target的值是保持一致的,无论修改哪一个另外一个值相应改变。

 

 这四个数值在程序编译时也没有严格的检查,比如说,你可以将minSdkVersion设置的比maxSdkVersion还大,他会自动忽略掉错误的maxSdkVersion。

————————————————————————————————————————————————————————————


 在 新建一个 android project 时,要求输入 minSdkVersion 这一项,一般我们是指定和我们使用的 SDK 版本相一致的 API Level. 然后,在androidManifest.xml 文件中会有一个对应的属性:android:minSdkVersion .那这个属性是否可以修改呢?我觉得是可以的,但不能随便修改。

    "android:minSdkVersion" ,故名思义,就是最小的 SDK 版本,这个值是对应 Android 不同版本的 API Level , 如 Android 1.5 对应 3,Android 1.6 对应 4,Android 2.1 对应7,Android2.2对应8 ,Android 2.3.3 对应10,等等。。。当用户指定这个值后,Android 系统会用这个指定的值对应的 SDK 版本去编译你的应用程序。这是错误的,minSdkVersion在程序安装期间起作用,指定SDK版本去编译你的app的地方是project.properties.

eclipse用ant去编译

    那么,我们在 androidManifest.xml 中指定的话,必须是比我们新建时的 API Level 小或相等的值,这样 Android 系统在编译的时候,才会用对应的版本的 SDK 进行编译。假如修改后的 android:minSdkVersion 比我们 project 里的 SDK 版本对应的 API level 大,那么Android 系统在编译的时候,就会报错。


举例说明:

    1. 我们新建一个 Android Project (HelloAndroid), 指定为 Android 2.2 版本,对应的 minSdkVersion 填8,finish;

    2. 此时我们运行 HelloAndroid ,会运行一个 2.2 版本的模拟器。

    3. 假若我们现在去 AndroidManifest.xml 文件 中修改 android:minSdkVersion=7,再次运行,那么会在我们已经打开的 2.2 模拟器上运行。因为 Android API 都是向后兼容的,所以系统在编译时,这个 Project 是利用 2.1 版本来编译的,但也可以在 2.2 模拟器上运行;若我们先把 2.2 模拟器关闭,再运行 HelloAndroid 这个Project 的话,那么会新建一个 API Level=7 的 模拟器来运行这个程序(也就是 2.1模拟器)。

    4. 假若我们修改  android:minSdkVersion=10, 那么无论你是否打开了 2.2 版本的模拟器,都会报错:

        ERROR: Application requires API version 10.Device API version is 8 (Android 2.2)(要求API 10的APP在真实SDK为API 8的Android机器上跑,是不行的。所谓API向后兼容,是高版本的SDK API能运行用低版本的SDK编译出来的应用程序,这个原则是完全考虑应用开发者的便利,因为2010年那会才出来Android 2.0,开发者用Android 2.0 SDK编译出APP,但APP代码里只是预留了调SDK API的函数,实际是去所安装机器上的SDK API的,那么2015年Android升级到5.0了,这个2010年写的用Android 2.0 SDK编译出来的APP依然能在Android 5.0 SDK的机器上跑,这就是“向后兼容”啊!).
        Launch canceled!

——————————————————————————————————————————————————————

平台版本

不同的设备可能运行不同的 Android 平台版本,比如 Android 4.0 或 Android 4.4。 较高的版本往往会在低版本系统中新增一些 API。 为了便于识别当前可用的 API 集,每个平台的版本都会被定义一个 API 级别。 例如,Android 1.0 是 API 级别1,Android 4.4 是 API 级别19。

通过 manifest 标签 < uses-sdk > 及其 minSdkVersion 属性,你可以用 API 级别来声明应用程序可兼容的最低系统版本。

例如, Calendar Provider API API 是从 Android 4.0(API 级别 14)开始引入的。 如果没有此类 API 应用程序就无法正常使用了,你就应该把最小支持版本声明为 API 级别14:

< manifest ... >
    < uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
   ...
< /manifest >

minSdkVersion 属性声明了应用程序可兼容的最低系统版本, targetSdkVersion 属性则声明了应用程序已优化过的最高系统版本。

高版本的 Android 系统可以兼容较低版本 API 编译出来的应用程序,因此只要使用了公开的 API,应用程序就应该可与未来的 Android 版本兼容。

注意: targetSdkVersion 属性并不能阻止应用程序在更高版本的平台上安装,但是系统可以通过它得知应用程序是否会适用较高版本的特性变动,因此它非常重要。 如果你没有把 targetSdkVersion 修改为最新的版本,如果在最新版本的平台上运行时,系统会假定应用程序还是需要用到某些向后兼容的特性。 例如,在Android 4.4 的特性变化 中,使用 AlarmManager API 创建的 Alarm 提醒时间缺省将不再精确,这样系统可以批量处理 Alarm 以节省电力。 但是如果应用程序的目标 API 级别小于 19,则系统仍然会沿用之前的 API 特性。

不过,假如应用程序用到了最新版本的 API,但是主体功能却不需要使用, 你就应该在运行时检查 API 级别,并在 API 版本过低时平稳地降低对系统特性的需求。 在这种情况下,请把 minSdkVersion 设置为程序主体功能需要的最低版本,并将当前系统的版本 SDK_INT 与程序所需 API 级别对应的代码常量相比较,这些常量在Build.VERSION_CODES 中给出。 例如:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
   // Running on something older than API level 11, so disable 
   // the drag/drop features that use ClipboardManager APIs 
   disableDragAndDrop(); 
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值