应用程序版本
在程序升级/维护过程中,版本控制是一个很重要的内容。
- 用户需要了解安装到设备上的应用程序的版本信息,以及了解哪些版本可以进行升级。
- 其它应用程序——包括你发布的其它程序——需要向系统查询你的应用程序的版本,来确定相互之间的兼容性。
- 你的应用程序发布的服务可能也需要查询版本来显示给用户。
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 name | Version | API 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列表如下:
Build | Tag | Notes |
---|---|---|
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 |