在程序升級/維護過程中,版本控制是一個很重要的內容。
· 用戶需要了解安裝到設備上的應用程序的版本信息,以及了解哪些版本可以進行升級。
· 其它應用程序——包括你發布的其它程序——需要向系統查詢你的應用程序的版本,來確定相互之間的兼容性。
· 你的應用程序發布的服務可能也需要查詢版本來顯示給用戶。
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=" 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等級限制。