對您的應(yīng)用進(jìn)行版本控制

版本控制是應(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 {} 塊中的 versionCodeversionName設(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)用的版本信息眯停。要獲取版本信息济舆,請使用 PackageManagergetPackageInfo(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)的 minSdkVersiontargetSdkVersion 設(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)建變體

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悠栓,一起剝皮案震驚了整個(gè)濱河市霉涨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惭适,老刑警劉巖笙瑟,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異癞志,居然都是意外死亡逮走,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來师溅,“玉大人茅信,你說我怎么就攤上這事∧钩簦” “怎么了蘸鲸?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窿锉。 經(jīng)常有香客問我酌摇,道長,這世上最難降的妖魔是什么嗡载? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任窑多,我火速辦了婚禮,結(jié)果婚禮上洼滚,老公的妹妹穿的比我還像新娘埂息。我一直安慰自己,他們只是感情好遥巴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布千康。 她就那樣靜靜地躺著,像睡著了一般铲掐。 火紅的嫁衣襯著肌膚如雪拾弃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天摆霉,我揣著相機(jī)與錄音豪椿,去河邊找鬼。 笑死携栋,一個(gè)胖子當(dāng)著我的面吹牛砂碉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刻两,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼增蹭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磅摹?” 一聲冷哼從身側(cè)響起滋迈,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎户誓,沒想到半個(gè)月后饼灿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帝美,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年碍彭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庇忌,死狀恐怖舞箍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情皆疹,我是刑警寧澤疏橄,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站略就,受9級特大地震影響捎迫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜表牢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一窄绒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崔兴,春花似錦彰导、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搁宾。三九已至折汞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盖腿,已是汗流浹背爽待。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翩腐,地道東北人鸟款。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像茂卦,于是被迫代替她去往敵國和親何什。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 近期有一個(gè)工作任務(wù):按照某個(gè)規(guī)則等龙,給Android應(yīng)用設(shè)置一個(gè)在編譯時(shí)自動(dòng)生成的versionCode與versi...
    匿蟒閱讀 20,576評論 11 28
  • 版權(quán)聲明:本文為博主原創(chuàng)文章处渣,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/zhaoyanj...
    勤奮的pangdunhu閱讀 2,032評論 0 1
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng)蛛砰,請點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,135評論 8 72
  • 說明 本文主要介紹和Gradle關(guān)系密切罐栈、相對不容易理解的配置,偏重概念介紹泥畅。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,631評論 1 62
  • Gradle 是一款構(gòu)建系統(tǒng)工具荠诬,它的 DSL 基于 Groovy 實(shí)現(xiàn)。Gradle 構(gòu)建的大部分功能都是通過插...
    任教主來也閱讀 3,056評論 3 6