Android 增量更新 (二)更新流程

接上一節(jié)的內(nèi)容需了,通過(guò)使用 Bsdiff 可以成功實(shí)現(xiàn)拆分和合并了还栓。這個(gè)時(shí)候就要想一下如何完成整個(gè)更新的過(guò)程锦庸。

必須想清楚的問(wèn)題

這個(gè)時(shí)候要注意不再是增量拆分,而是如何平滑得實(shí)現(xiàn)應(yīng)用的更新闰非。

  • 優(yōu)先級(jí)問(wèn)題
    當(dāng)檢查更新時(shí)魔策,存在最新版本的補(bǔ)丁時(shí),優(yōu)先使用增量更新河胎;如若沒(méi)有闯袒,采用完整更新。
  • 拆分次數(shù)問(wèn)題
    隨著版本不斷迭代游岳,由于 Bsdiff 的拆分效能低政敢,不能也沒(méi)必要做到每個(gè)新版本提供以前所有版本的補(bǔ)丁。
    試想一下胚迫,一個(gè)版本越久遠(yuǎn)越是可能與新版本存在較大差異喷户,補(bǔ)丁包大小逐漸接近完整包大小,再者访锻,App隨著apk的Size也隨之增加褪尝,拆分所需的時(shí)間、空間也隨之增大期犬,發(fā)布新版本的處理時(shí)間越來(lái)越長(zhǎng)河哑,增量更新的優(yōu)勢(shì)不復(fù)存在了,這是不能接受的龟虎。
    在更新版本的時(shí)候給予設(shè)置向前比較次數(shù)璃谨,我以3個(gè)月為期,對(duì)于每月更新的APP可以設(shè)為3次。
  • 唯一性問(wèn)題
    通常情況下佳吞,APP 的版本標(biāo)識(shí)是 包名或者是 application id 拱雏,版本號(hào),版本號(hào)底扳,我則增加一個(gè)類(lèi)型屬性铸抑,可以理解為渠道名,這是為了解決一些現(xiàn)實(shí)的問(wèn)題衷模,同一APP給不同客戶(hù)群體使用鹊汛,例如測(cè)試人員和正式用戶(hù),測(cè)試人員可以收到內(nèi)部快速迭代的更新包算芯,而不會(huì)影響到正式用戶(hù),這樣可以給特定用戶(hù)群開(kāi)放不同的版本功能凳宙,并且能夠?qū)崿F(xiàn)階段性切換產(chǎn)品線(xiàn)熙揍。
  • 完整性檢驗(yàn)
    通過(guò)SHA1校驗(yàn)碼確認(rèn)合并前后文件都是一致的,保障合并的成功率
  • 級(jí)聯(lián)刪除
    可以單獨(dú)刪除補(bǔ)丁包數(shù)據(jù)氏涩,相應(yīng)版本只支持完整更新了届囚;刪除完整包數(shù)據(jù),就要附帶刪除所有相關(guān)的補(bǔ)丁包數(shù)據(jù)是尖,避免導(dǎo)致更新系統(tǒng)混亂意系。

界面設(shè)計(jì)

目前在用的系統(tǒng)也是由這個(gè)雛形發(fā)展而來(lái),而我現(xiàn)在并不在負(fù)責(zé)這個(gè)部分的編碼饺汹,這里公布部分界面以及邏輯原理蛔添。


    1. 產(chǎn)品管理
      這里的產(chǎn)品管理是以移動(dòng)產(chǎn)品為標(biāo)準(zhǔn)劃分。
      產(chǎn)品ID:自動(dòng)UUID兜辞,在各個(gè)系統(tǒng)模塊中通用迎瞧,這里僅用于更新模塊,也可用于廣告投放模塊逸吵。
      產(chǎn)品名稱(chēng): 必填
      產(chǎn)品說(shuō)明:一個(gè)公司里面可能存在很多類(lèi)似的產(chǎn)品凶硅,用于區(qū)分細(xì)節(jié)。
      包名:如果上傳的是APK包扫皱,則和應(yīng)用市場(chǎng)類(lèi)似足绅,可以不填,自動(dòng)獲取第一次上傳的application id 韩脑,以后通過(guò)新增版本頁(yè)面上傳是會(huì)對(duì)比這個(gè)參數(shù)氢妈,不符合就會(huì)上傳失敗,避免腦抽了段多,出現(xiàn)嚴(yán)重的問(wèn)題允懂。
      云端下載:自身系統(tǒng)的帶寬有限,通過(guò)把包放到阿里云或者七牛等地方衩匣,減低帶寬壓力蕾总。
  • 2)版本管理
    如圖所示粥航。這里會(huì)在完整包信息之間插入補(bǔ)丁包信息。補(bǔ)丁包信息必須先于版本信息入庫(kù)生百,避免出現(xiàn)查詢(xún)異常递雀。
    產(chǎn)品名稱(chēng):必選
    版本類(lèi)型:必選
    包名:自動(dòng)獲取,產(chǎn)品存在包名蚀浆,將會(huì)進(jìn)行對(duì)比缀程,否則記入產(chǎn)品信息中。
    版本名:給普通用戶(hù)查看的版本信息(字符串)市俊。
    版本號(hào):int類(lèi)型杨凑,用于升級(jí)的版本信息,新上傳的版本號(hào)必須大于上一版本摆昧。
    備注:填入升級(jí)信息撩满。
    向前對(duì)比版本數(shù)量:月更新產(chǎn)品,建議設(shè)為3次绅你,意思是向上對(duì)比不多于3個(gè)版本號(hào)伺帘;周更新產(chǎn)品自己酌情處理。
    SHA1:當(dāng)前文件的SHA1校驗(yàn)碼忌锯。
    舊版本SHA1:之前版本的完整包校驗(yàn)碼伪嫁,用于更新查詢(xún)接口。

提交新版本過(guò)程

版本提交流程

接口設(shè)計(jì)

檢查更新接口擁有4個(gè)請(qǐng)求參數(shù)偶垮,如下

參數(shù)名 參數(shù)描述
productId 產(chǎn)品ID
versionCode 當(dāng)前版本號(hào)
type 版本類(lèi)型
oldsha1code 當(dāng)前版本的校驗(yàn)碼

返回參數(shù):

參數(shù)名 參數(shù)描述
name 產(chǎn)品ID
updateType 更新類(lèi)型有三種张咳,inc(增量)、full(完整)似舵、noupdate(無(wú)更新)
versionCode 最新版本號(hào)
versionName 最新版本名
size long類(lèi)型晶伦,更新包大小
sizeOriginal 在增量更新有效時(shí),表示最新包大小
newSHA 最新包的SHA1校驗(yàn)碼
increaseSHA 補(bǔ)丁包的SHA1校驗(yàn)碼
url 下載鏈接
updateList 更新信息

在系統(tǒng)中啄枕,版本37的SHA1 是 bbc3be08...4f72f41婚陪,最新版本是39,SHA1是d53eca....46474811f,從37到39的補(bǔ)丁包的SHA1 是56efbfce....8628频祝。
1)情況一 :可能當(dāng)前版本和最新版本不存在補(bǔ)丁包泌参,也可能是當(dāng)前版本的檢驗(yàn)碼與服務(wù)器記錄不符,要求完整更新
參數(shù):

productId:b6d9f85e...64ef
versionCode:37
type:official
oldsha1code:1c5cae2551....964fcab

接口結(jié)果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "full",
        "versionCode": 39,
        "versionName": "1.3.3",
        "size": 20185438,
        "newSHA": "d53eca....46474811f",
        "url": "http://xxx.com/files/d53/d53ec/xxxx_1.3.3_39.apk",
        "updateList": [
            {
                "versionCode": 39,
                "versionName": "1.3.3",
                "updateContent": "1.【新增】?jī)?yōu)化月租續(xù)期繳費(fèi)常空,新增自然月續(xù)期\n2.【優(yōu)化】?jī)?yōu)化附近車(chē)場(chǎng)列表加載速度\n3.【優(yōu)化】?jī)?yōu)化修復(fù)車(chē)位申請(qǐng)異常信息提示\n我們始終努力改善您的體驗(yàn)沽一,提高穩(wěn)定性以及性能優(yōu)化"
            },
            {
                "versionCode": 38,
                "versionName": "1.3.2",
                "updateContent": "1.【新增】預(yù)約車(chē)位增加車(chē)庫(kù)位置信息和線(xiàn)路導(dǎo)航;\r\n2.【新增】車(chē)場(chǎng)列表新增地區(qū)選擇和條件排序漓糙;\r\n3.【優(yōu)化】?jī)?yōu)化附近車(chē)場(chǎng)信息和顯示铣缠;\r\n4.【優(yōu)化】?jī)?yōu)化月租到期續(xù)費(fèi);\r\n我們始終努力改善您的體驗(yàn),提高穩(wěn)定性以及性能優(yōu)化蝗蛙。"
            }
        ]
    }
}

2) 情況二:增量更新
請(qǐng)求參數(shù):

productId:b6d9f85e...64ef
versionCode:37
type:official
oldsha1code:bbc3be08...4f72f41

接口結(jié)果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "inc",
        "versionCode": 39,
        "versionName": "1.3.3",
        "size": 4049580,
        "sizeOriginal": 20185438,
        "newSHA": "d53eca....46474811f",
        "increaseSHA": "56efbfce....8628",
        "url": "http://xxx.com/files/d53/d53ec/xxxx_37_39.patch",
        "updateList": [
            {
                "versionCode": 39,
                "versionName": "1.3.3",
                "updateContent": "1.【新增】?jī)?yōu)化月租續(xù)期繳費(fèi)蝇庭,新增自然月續(xù)期\n2.【優(yōu)化】?jī)?yōu)化附近車(chē)場(chǎng)列表加載速度\n3.【優(yōu)化】?jī)?yōu)化修復(fù)車(chē)位申請(qǐng)異常信息提示\n我們始終努力改善您的體驗(yàn),提高穩(wěn)定性以及性能優(yōu)化"
            },
            {
                "versionCode": 38,
                "versionName": "1.3.2",
                "updateContent": "1.【新增】預(yù)約車(chē)位增加車(chē)庫(kù)位置信息和線(xiàn)路導(dǎo)航捡硅;\r\n2.【新增】車(chē)場(chǎng)列表新增地區(qū)選擇和條件排序哮内;\r\n3.【優(yōu)化】?jī)?yōu)化附近車(chē)場(chǎng)信息和顯示;\r\n4.【優(yōu)化】?jī)?yōu)化月租到期續(xù)費(fèi)壮韭;\r\n我們始終努力改善您的體驗(yàn)北发,提高穩(wěn)定性以及性能優(yōu)化。"
            }
        ]
    }
}

3)情況三:無(wú)更新,有兩種原因觸發(fā)喷屋,一是最新版本檢查更新時(shí)出現(xiàn)琳拨,也可能是測(cè)試版本出現(xiàn)版本號(hào)比發(fā)布系統(tǒng)上的新。
請(qǐng)求參數(shù):

productId:b6d9f85e...64ef
versionCode:39
type:official
oldsha1code:d53eca....46474811f

接口結(jié)果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "noupdate"
    }
}

注意:不要在同一文件夾下存放過(guò)多文件屯曹,會(huì)導(dǎo)致磁盤(pán)查找緩慢狱庇。可以利用像上面的方式利用SHA1來(lái)分散存儲(chǔ)是牢。

服務(wù)器這邊的情況大致就是這樣了僵井,這個(gè)只要和后臺(tái)開(kāi)發(fā)說(shuō)明白了陕截,很快就能完成驳棱,這個(gè)接口除了黑盒測(cè)試之外,需要仔細(xì)過(guò)一遍白盒測(cè)試农曲,如果存在潛在的問(wèn)題社搅,會(huì)在往后的發(fā)布過(guò)程中暴露出來(lái),導(dǎo)致嚴(yán)重的更新事故乳规。

第三部分本來(lái)想寫(xiě)APP的更新過(guò)程的形葬,細(xì)想一下,這些年我換了幾種網(wǎng)絡(luò)框架暮的,大致的邏輯也沒(méi)什么變化笙以,唯有網(wǎng)絡(luò)框架變化導(dǎo)致代碼重構(gòu)。除非有迫切的原因冻辩,這個(gè)部分暫時(shí)不會(huì)寫(xiě)了猖腕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恨闪,隨后出現(xiàn)的幾起案子倘感,更是在濱河造成了極大的恐慌,老刑警劉巖咙咽,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件老玛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜡豹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)麸粮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人余素,你說(shuō)我怎么就攤上這事豹休。” “怎么了桨吊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵威根,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我视乐,道長(zhǎng)洛搀,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任佑淀,我火速辦了婚禮留美,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伸刃。我一直安慰自己谎砾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布捧颅。 她就那樣靜靜地躺著景图,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碉哑。 梳的紋絲不亂的頭發(fā)上挚币,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音扣典,去河邊找鬼妆毕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贮尖,可吹牛的內(nèi)容都是我干的笛粘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼湿硝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼薪前!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起图柏,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤序六,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蚤吹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體例诀,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡随抠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了繁涂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拱她。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扔罪,靈堂內(nèi)的尸體忽然破棺而出秉沼,到底是詐尸還是另有隱情,我是刑警寧澤矿酵,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布唬复,位于F島的核電站,受9級(jí)特大地震影響全肮,放射性物質(zhì)發(fā)生泄漏敞咧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一辜腺、第九天 我趴在偏房一處隱蔽的房頂上張望休建。 院中可真熱鬧,春花似錦评疗、人聲如沸测砂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砌些。三九已至,卻和暖如春胧华,著一層夾襖步出監(jiān)牢的瞬間寄症,已是汗流浹背宙彪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工矩动, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人释漆。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓悲没,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親男图。 傳聞我的和親對(duì)象是個(gè)殘疾皇子示姿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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