在程序升級/維護過程中,版本控制是一個很重要的內(nèi)容。
· 用戶需要了解安裝到設(shè)備上的應(yīng)用程序的版本信息,以及了解哪些版本可以進行升級。
· 其它應(yīng)用程序——包括你發(fā)布的其它程序——需要向系統(tǒng)查詢你的應(yīng)用程序的版本,來確定相互之間的兼容性。
· 你的應(yīng)用程序發(fā)布的服務(wù)可能也需要查詢版本來顯示給用戶。
Android系統(tǒng)自身不檢查應(yīng)用程序的版本信息,也不會強制限制升級或兼容等。相反的,只是用戶或應(yīng)用程序自身對應(yīng)用程序的版本有限制。
Android系統(tǒng)會對程序manifest中描述的系統(tǒng)版本(minSdkVersion特性指定)進行檢查。這樣,應(yīng)用程序可以指定兼容的最低系統(tǒng)API等級。了解更多信息,請參考“指定程序的系統(tǒng)API等級”。
應(yīng)用程序版本設(shè)定
為了定義應(yīng)用程序的版本信息,你需要在程序的manifest文件中進行設(shè)定。這里有兩個特性,而且往往你需要同時設(shè)定這兩個值:
· android:versionCode——整數(shù)值,代表應(yīng)用程序代碼的相對版本。
整數(shù)值有利于其它程序比較,檢查是升級還是降級。你可以把這個值設(shè)定為任何想設(shè)的值,但是,你必須保證后續(xù)更新版的值要比這個大。系統(tǒng)不會強制要求這一行為,但是隨著版本更新值也增加是正常的行為。
一般來說,你發(fā)布的第一版程序的versionCode設(shè)定為1,然后每次發(fā)布都會相應(yīng)增加,不管發(fā)布的內(nèi)容是較大還是較小的。這意味著android:versionCode不像應(yīng)用程序的發(fā)布版本(看下面的android:versionName)那樣顯示給用戶。應(yīng)用程序和發(fā)布的服務(wù)不應(yīng)該顯示這個版本值給用戶。
· android:versionName——字符串值,代表應(yīng)用程序的版本信息,需要顯示給用戶。
與android:versionCode一樣,系統(tǒng)不會為了任何內(nèi)部的目的使用這個值,除了顯示給用戶外。發(fā)布的服務(wù)也需要提取這個值來顯示給用戶。
你需要在manifest文件中定義這兩個版本特性。
下面是一個manifest的例子,展示了android:versionCode和android:versionName特性的定義。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns: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的值顯示當(dāng)前apk是第二版釋放的代碼,而android:codeName字符串中表述了相應(yīng)的小版本號。
Android框架提供了一個API來查詢應(yīng)用程序的版本信息。為了獲取版本信息,應(yīng)用程序可以使用PackageManager的getPackageInfo(java.lang.String, int)方法。
指定程序的系統(tǒng)API等級
如果你的程序有最低的Android平臺限制,或者只是設(shè)計用于特定范圍的Android平臺,那么,你就可以在應(yīng)用程序的manifest文件中指定API等級的信息。這樣做是為了確保應(yīng)用程序只能安裝到搭載有兼容的Android系統(tǒng)的設(shè)備上。
指定API等級限制,在manifest文件中<uses-sdk>元素,并附帶一個或多個特性:
· android:minSdkVersion——應(yīng)用程序能運行的最低Android系統(tǒng)的版本,通過平臺的API等級標(biāo)識指定。
· android:targetSdkVersion——指定程序設(shè)計用于運行的API等級。在一些情況下,允許應(yīng)用程序顯式的指定目標(biāo)運行的API等級,而不是僅設(shè)定最低運行的API等級。
· android:maxSdkVersion——應(yīng)用程序能運行的最高Android系統(tǒng)的版本,通過平臺的API等級標(biāo)識指定。重要:使用這個特性之前,請閱讀<uses-sdk>文檔。
當(dāng)準(zhǔn)備安裝應(yīng)用程序時,系統(tǒng)會檢查這個屬性的值并與系統(tǒng)的版本進行比較。如果android:minSdkVersion的值大于系統(tǒng)的版本,系統(tǒng)會放棄當(dāng)前程序的安裝。相似的,系統(tǒng)也只在android:maxSdkVersion與系統(tǒng)的版本兼容時才執(zhí)行安裝。
如果你沒有在manifest中指定這些特性,那么,系統(tǒng)會假設(shè)你的程序與所有平臺的版本兼容,且沒有最高的API等級限制。