应用程序版本

在程序升级/维护过程中,版本控制是一个很重要的内容。

  • 用户需要了解安装到设备上的应用程序的版本信息,以及了解哪些版本可以进行升级。
  • 其它应用程序——包括你发布的其它程序——需要向系统查询你的应用程序的版本,来确定相互之间的兼容性。
  • 你的应用程序发布的服务可能也需要查询版本来显示给用户。

Android系统自身不检查应用程序的版本信息,也不会强制限制升级或兼容等。相反的,只是用户或应用程序自身对应用程序的版本有限制。

Android系统会对程序manifest中描述的系统版本(minSdkVersion特性指定)进行检查。这样,应用程序可以指定兼容的最低系统API等级。了解更多信息,请参考“指定程序的系统API等级”。

应用程序版本设定

为了定义应用程序的版本信息,你需要在程序的manifest文件中进行设定。这里有两个特性,而且往往你需要同时设定这两个值:

  • android:versionCode——整数值,代表应用程序代码的相对版本。

整数值有利于其它程序比较,检查是升级还是降级。你可以把这个值设定为任何想设的值,但是,你必须保证后续更新版的值要比这个大。系统不会强制要求这一行为,但是随着版本更新值也增加是正常的行为。

一般来说,你发布的第一版程序的versionCode设定为1,然后每次发布都会相应增加,不管发布的内容是较大还是较小的。这意味着android:versionCode不像应用程序的发布版本(看下面的android:versionName)那样显示给用户。应用程序和发布的服务不应该显示这个版本值给用户。

  • android:versionName——字符串值,代表应用程序的版本信息,需要显示给用户。

与android:versionCode一样,系统不会为了任何内部的目的使用这个值,除了显示给用户外。发布的服务也需要提取这个值来显示给用户。

你需要在manifest文件中定义这两个版本特性。

下面是一个manifest的例子,展示了android:versionCode和android:versionName特性的定义。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.package.name"
      android:versionCode="2"
      android:versionName="1.1">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        ...
    </application>
</manifest>

在这个例子中,android:versionCode的值显示当前apk是第二版释放的代码,而android:codeName字符串中表述了相应的小版本号。

Android框架提供了一个API来查询应用程序的版本信息。为了获取版本信息,应用程序可以使用PackageManager的getPackageInfo(java.lang.String, int)方法。

指定程序的系统API等级

如果你的程序有最低的Android平台限制,或者只是设计用于特定范围的Android平台,那么,你就可以在应用程序的manifest文件中指定API等级的信息。这样做是为了确保应用程序只能安装到搭载有兼容的Android系统的设备上。

指定API等级限制,在manifest文件中<uses-sdk>元素,并附带一个或多个特性:

  • android:minSdkVersion——应用程序能运行的最低Android系统的版本,通过平台的API等级标识指定。
  • android:targetSdkVersion——指定程序设计用于运行的API等级。在一些情况下,允许应用程序显式的指定目标运行的API等级,而不是仅设定最低运行的API等级。
  • android:maxSdkVersion——应用程序能运行的最高Android系统的版本,通过平台的API等级标识指定。重要:使用这个特性之前,请阅读<uses-sdk>文档。

当准备安装应用程序时,系统会检查这个属性的值并与系统的版本进行比较。如果android:minSdkVersion的值大于系统的版本,系统会放弃当前程序的安装。相似的,系统也只在android:maxSdkVersion与系统的版本兼容时才执行安装。

如果你没有在manifest中指定这些特性,那么,系统会假设你的程序与所有平台的版本兼容,且没有最高的API等级限制。

API级别与NDK的对应关系如下:

 

Code nameVersionAPI level
(no code name) 1.0 API level 1
(no code name) 1.1 API level 2
Cupcake 1.5 API level 3, NDK 1
Donut 1.6 API level 4, NDK 2
Eclair 2.0 API level 5
Eclair 2.0.1 API level 6
Eclair 2.1 API level 7, NDK 3
Froyo 2.2.x API level 8, NDK 4
Gingerbread 2.3 - 2.3.2 API level 9, NDK 5
Gingerbread 2.3.3 - 2.3.7 API level 10
Honeycomb 3.0 API level 11
Honeycomb 3.1 API level 12, NDK 6
Honeycomb 3.2.x API level 13
IceCreamSandwich 4.0.1 - 4.0.2 API level 14, NDK 7
IceCreamSandwich 4.0.3 API level 15

 

Tags列表如下:

 

BuildTagNotes
DRC83 android-1.6_r1.1 earliest Donut version, ADP1, ADP2
DRC92 android-1.6_r1.2  
DRD08 android-1.6_r1.3  
DRD20 android-1.6_r1.4  
DMD64 android-1.6_r1.5 latest Donut version
ESD20 android-2.0_r1 earliest Eclair version
ESD56 android-2.0.1_r1  
ERD79 android-2.1_r1 Nexus One
ERE27 android-2.1_r2 Nexus One
EPE54B android-2.1_r2.1p Nexus One
ESE81 android-2.1_r2.1s  
EPF21B android-2.1_r2.1p2 latest Eclair version
FRF85B android-2.2_r1 earliest Froyo version, Nexus One
FRF91 android-2.2_r1.1 Nexus One
FRG01B android-2.2_r1.2  
FRG22D android-2.2_r1.3  
FRG83 android-2.2.1_r1 Nexus One
FRG83D android-2.2.1_r2 Nexus One
FRG83G android-2.2.2_r1 Nexus One
FRK76 android-2.2.3_r1  
FRK76C android-2.2.3_r2 latest Froyo version
GRH55 android-2.3_r1 earliest Gingerbread version, Nexus S
GRH78 android-2.3.1_r1 Nexus S
GRH78C android-2.3.2_r1 Nexus S
GRI40 android-2.3.3_r1 Nexus One, Nexus S
GRI54 android-2.3.3_r1.1 Nexus S
GRJ06D android-2.3.4_r0.9 Nexus S 4G
GRJ22 android-2.3.4_r1 Nexus One, Nexus S, Nexus S 4G
GRJ90 android-2.3.5_r1 Nexus S 4G
GRK39C android-2.3.6_r0.9 Nexus S
GRK39F android-2.3.6_r1 Nexus One, Nexus S
GWK74 android-2.3.7_r1 latest Gingerbread version, Nexus S 4G
ITL41D android-4.0.1_r1 earliest IceCreamSandwich version, Galaxy Nexus
ITL41D android-4.0.1_r1.1 Galaxy Nexus
ITL41F android-4.0.1_r1.2 Galaxy Nexus
ICL53F android-4.0.2_r1 Galaxy Nexus
IML74K android-4.0.3_r1 Nexus S
IML77   latest IceCreamSandwich version

详见:http://source.android.com/source/build-numbers.html

posted @ 2012-05-08 11:54  quding0308  阅读(257)  评论(0编辑  收藏  举报