版本控制是應(yīng)用升級和維護(hù)策略的關(guān)鍵組成部分。版本控制很重要,因?yàn)椋?/p>
- 用戶需要了解其設(shè)備上所安裝應(yīng)用的具體版本信息,以及可供安裝的升級版本鸿竖。
- 其他應(yīng)用(包括您作為套件發(fā)布的其他應(yīng)用)需要查詢系統(tǒng)獲取應(yīng)用的版本,以確定兼容性和識別依賴關(guān)系铸敏。
- 發(fā)布應(yīng)用時(shí)所使用的服務(wù)可能也需要查詢應(yīng)用的版本缚忧,以便它們可以向用戶顯示版本。發(fā)布服務(wù)可能還需要檢查應(yīng)用版本杈笔,以確定兼容性和建立升級/降級關(guān)系闪水。
Android 系統(tǒng)不會(huì)使用應(yīng)用版本信息對第三方應(yīng)用的升級、降級或兼容性進(jìn)行限制蒙具,而是由您負(fù)責(zé)在您的應(yīng)用內(nèi)執(zhí)行版本限制球榆,或通知用戶版本限制與局限性峰弹。不過,Android 系統(tǒng)會(huì)根據(jù)構(gòu)建文件中 minSdkVersion
設(shè)置的說明強(qiáng)制執(zhí)行系統(tǒng)版本兼容性芜果。該設(shè)置允許應(yīng)用指定與其兼容的最低系統(tǒng) API。如需了解詳細(xì)信息融师,請參閱指定最低系統(tǒng) API 版本右钾。
設(shè)置應(yīng)用版本信息
要為您的應(yīng)用定義版本信息,請?jiān)?Gradle 構(gòu)建文件中為版本設(shè)置設(shè)定相應(yīng)的值旱爆。這些值隨后將在構(gòu)建流程中合并到您應(yīng)用的清單文件中舀射。
注:如果您的應(yīng)用直接在
<manifest>
元素中定義應(yīng)用版本,Gradle 構(gòu)建文件中的版本值將替換清單中的設(shè)置怀伦。此外脆烟,在 Gradle 構(gòu)建文件中定義這些設(shè)置還讓您可以為應(yīng)用的不同版本指定不同的值。為了在合并清單時(shí)提高靈活性和避免潛在覆蓋房待,您應(yīng)當(dāng)從<manifest>
元素中移除這些屬性邢羔,并改在 Gradle 構(gòu)建文件中定義您的版本設(shè)置。
可配置兩個(gè)設(shè)置桑孩,您應(yīng)始終為它們定義相應(yīng)的值:
-
versionCode
- 一個(gè)整數(shù)拜鹤,用作內(nèi)部版本號。此數(shù)字僅用于確定一個(gè)版本是否比另一個(gè)版本更新流椒,數(shù)字越大表示版本越新敏簿。這不是顯示給用戶的版本號;后者通過下面的versionName
設(shè)置設(shè)定宣虾。該值是一個(gè)整數(shù)惯裕,其他應(yīng)用可以通過編程方式對其進(jìn)行評估,例如绣硝,檢查升級或降級關(guān)系蜻势。您可以將該值設(shè)為您需要的任何整數(shù),不過域那,您應(yīng)確保應(yīng)用的每個(gè)后續(xù)版本都使用一個(gè)較大的值咙边。系統(tǒng)不強(qiáng)制執(zhí)行此行為,但通常會(huì)針對后續(xù)版本增大此值次员。
通常败许,發(fā)布應(yīng)用的第一個(gè)版本時(shí)需要將
versionCode
設(shè)為 1,之后為每個(gè)發(fā)布版本單調(diào)增大此值淑蔚,無論發(fā)布的是主版本還是次版本市殷。這表示versionCode
值不一定與用戶可見的應(yīng)用發(fā)布版本非常相似(請參閱下面的versionName
)。應(yīng)用和發(fā)布服務(wù)不應(yīng)向用戶顯示此版本值刹衫。
警告:Google Play 允許的最大
versionCode
值為 2100000000醋寝。
-
versionName
- 一個(gè)字符串搞挣,用作顯示給用戶的版本號∫粜撸可以作為原始字符串或?qū)ψ址Y源的引用指定此設(shè)置囱桨。此值是一個(gè)字符串,您可以使用 <major>.<minor>.<point> 字符串或任何其他類型的絕對或相對版本標(biāo)識符來描述應(yīng)用版本嗅绰。除了向用戶顯示之外舍肠,
versionName
沒有其他用途。
您可以將這些設(shè)置包含到 defaultConfig {}
塊中(嵌套在模塊的 build.gradle
文件的 android {}
塊內(nèi)部)窘面,為它們定義默認(rèn)值翠语。隨后,您可以通過為各個(gè)構(gòu)建類型或產(chǎn)品風(fēng)味定義單獨(dú)的值财边,為應(yīng)用的不同版本替換這些默認(rèn)值肌括。下面的 build.gradle
文件顯示了 defaultConfig {}
塊和 productFlavors {}
塊中的 versionCode
和 versionName
設(shè)置。
android {
...
defaultConfig {
...
versionCode 2
versionName "1.1"
}
productFlavors {
demo {
...
versionName "1.1-demo"
}
full {
...
}
}
}
在本示例的 defaultConfig {}
塊中酣难,versionCode
值表示當(dāng)前 APK 包含應(yīng)用的第二個(gè)版本谍夭,versionName
字符串則指定應(yīng)用將以版本 1.1 向用戶顯示。此 build.gradle
文件還定義了兩個(gè)產(chǎn)品風(fēng)味憨募,即“demo”和“full”现柠。由于“demo”產(chǎn)品風(fēng)味將 versionName
定義為“1.1-demo”陡厘,“demo”將使用此 versionName
,而不是默認(rèn)值≌∠郏“full”產(chǎn)品風(fēng)味塊未定義 versionName
轻纪,因此它將使用默認(rèn)值 1.1壶辜。
Android 框架提供了一個(gè) API逞泄,讓您可以查詢系統(tǒng),獲取有關(guān)應(yīng)用的版本信息眯停。要獲取版本信息济舆,請使用 PackageManager 的 getPackageInfo(java.lang.String, int)
方法。
注:如果使用 Instant Run莺债,Android Studio 會(huì)自動(dòng)將
versionCode
設(shè)置為MAXINT
滋觉,將versionName
設(shè)置為INSTANTRUN
。
指定 API 級別要求
如果您的應(yīng)用需要特定的最低版本的 Android 平臺(tái)齐邦,您可以在應(yīng)用的 build.gradle
文件中以 API 級別設(shè)置的形式指定版本要求椎侠。在構(gòu)建流程中,這些設(shè)置將合并到您應(yīng)用的清單文件中措拇。指定 API 級別要求可確保只能將您的應(yīng)用安裝在運(yùn)行兼容的 Android 平臺(tái)版本的設(shè)備上我纪。
注:如果您直接在應(yīng)用的清單文件中指定 API 級別要求,構(gòu)建文件中的對應(yīng)設(shè)置將替換清單文件中的設(shè)置。此外浅悉,在 Gradle 構(gòu)建文件中定義這些設(shè)置還讓您可以為應(yīng)用的不同版本指定不同的值趟据。為了在合并清單時(shí)提高靈活性和避免可能發(fā)生的覆蓋,您應(yīng)當(dāng)從
<uses-sdk>
元素中移除這些屬性术健,并改在 Gradle 構(gòu)建文件中定義您的 API 級別設(shè)置汹碱。
存在兩種 API 級別設(shè)置:
-
minSdkVersion
- 可運(yùn)行應(yīng)用的最低版本的 Android 平臺(tái),由該平臺(tái)的 API 級別標(biāo)識符指定荞估。 -
targetSdkVersion
- 指定運(yùn)行應(yīng)用的目標(biāo) API 級別比被。在某些情況下,這允許應(yīng)用使用在目標(biāo) API 級別中定義的清單元素或行為泼舱,而不是僅限于使用那些針對最低 API 級別定義的元素或行為。
要在 build.gradle
文件中指定默認(rèn)的 API 級別要求枷莉,請將上面的一個(gè)或多個(gè)設(shè)置添加到 defaultConfig {}
塊中娇昙,嵌套在 android {}
塊內(nèi)。您還可以通過將設(shè)置添加到構(gòu)建類型或產(chǎn)品風(fēng)味的方式笤妙,為應(yīng)用的不同版本替換這些默認(rèn)值冒掌。下面的 build.gradle
文件可以指定 defaultConfig {}
塊中默認(rèn)的 minSdkVersion
和 targetSdkVersion
設(shè)置,并為一個(gè)產(chǎn)品風(fēng)味替換 minSdkVersion
蹲盘。
android {
...
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 24
}
productFlavors {
main {
...
}
afterLollipop {
...
minSdkVersion 21
}
}
}
在準(zhǔn)備安裝您的應(yīng)用時(shí)股毫,系統(tǒng)將檢查這些設(shè)置的值,并將其與系統(tǒng)版本比較召衔。如果 minSdkVersion
值大于系統(tǒng)版本铃诬,系統(tǒng)將阻止應(yīng)用安裝。
如果您不指定這些設(shè)置苍凛,系統(tǒng)將假設(shè)您的應(yīng)用與所有平臺(tái)版本兼容趣席。
如需了解詳細(xì)信息,請參閱 <uses-sdk>
清單元素文檔以及 API 級別文檔醇蝴。有關(guān) Gradle 構(gòu)建設(shè)置宣肚,請參閱配置構(gòu)建變體。