Android 增量更新全解

本文對(duì)BSDiff/Patch九默、HDiffPatch和XDelta三種差分包實(shí)現(xiàn)方案做對(duì)比測(cè)試,在Android APK的差分更新實(shí)現(xiàn)上,XDelta差分方案實(shí)現(xiàn)是最優(yōu)的。

一杉畜、增量更新原理

增量更新流程圖

1、增量更新主要分為兩步:

????1)服務(wù)端拿新版本A和舊版本B做差分衷恭,生成差分包C‘

????2)客戶端檢測(cè)到可增量更新的差分包此叠,下載差分包C‘之后,和本地舊版本B做合成随珠,生成新版本A灭袁。

2猬错、步驟詳細(xì)展開(kāi):

????服務(wù)器端:服務(wù)端的同學(xué)拿到客戶端同學(xué)開(kāi)發(fā)的新版本A,跟已發(fā)布的舊版本B1茸歧,B2兔魂,B3...做了差分生成相應(yīng)的差分包C1,C2举娩,C3...,并生成相應(yīng)差分包的MD5值构罗,當(dāng)然全量包的簽名铜涉、MD5值也是需要的,這樣客戶端需要的所有數(shù)據(jù)就OK了遂唧。

????客戶端:用戶手動(dòng)更新或程序主動(dòng)請(qǐng)求檢測(cè)更新:

????????1)客戶端用MD5值和版本號(hào)作為參數(shù)向服務(wù)端請(qǐng)求更新數(shù)據(jù)芙代,若服務(wù)端沒(méi)有差分包則返回全量包下載URL、MD5值盖彭、簽名值纹烹。

????????2)若服務(wù)端存在相應(yīng)的差分包則返回差分包下載URL,全量包簽名值召边、全量包和差分包MD5值铺呵,全量包簽名值和MD5值。把差分包下載到本地之后(C1)隧熙,先做MD5值校驗(yàn)片挂,確保下載的差分包數(shù)據(jù)的完整性,校驗(yàn)失敗則走全量更新邏輯贞盯,校驗(yàn)無(wú)誤和本地現(xiàn)有安裝的舊版本(B1)進(jìn)行差分合并生成新版本(A)音念,之后進(jìn)行合成版本的MD5值校驗(yàn)和簽名校驗(yàn),確保合成文件的完整性和簽名信息的正確性躏敢。校驗(yàn)無(wú)誤進(jìn)行安裝闷愤。

3、需要考慮的一些問(wèn)題:

????1)服務(wù)端生成的差分包大小接近新包大小件余,或者直接超過(guò)新包大小讥脐,就沒(méi)必要進(jìn)行差分更新;

????2)下載到本地之后是否需要進(jìn)行簽名校驗(yàn)依賴各自情況蛾扇,若有和系統(tǒng)方進(jìn)行合作的攘烛,系統(tǒng)方一般會(huì)拿APK進(jìn)行二次簽名之后作為系統(tǒng)內(nèi)置應(yīng)用。

????3)下載文件當(dāng)然也需要支持?jǐn)帱c(diǎn)續(xù)傳镀首,考慮再細(xì)點(diǎn)坟漱,下載APK的過(guò)程中有可能被劫持或者被運(yùn)營(yíng)商重定向,如果是全量更新下載更哄,可以和服務(wù)端約定每段下載數(shù)據(jù)的校驗(yàn)邏輯規(guī)則芋齿,在HTTP頭中附加校驗(yàn)字段數(shù)據(jù)腥寇,確保萬(wàn)無(wú)一失;

????4)服務(wù)端是否根據(jù)客戶端的更新請(qǐng)求實(shí)時(shí)生成差分?jǐn)?shù)據(jù)觅捆?從目前生成差分包的測(cè)試數(shù)據(jù)來(lái)看赦役,這個(gè)實(shí)現(xiàn)是不靠譜的。最好就是有新版本之后栅炒,在服務(wù)端先把差分包數(shù)據(jù)準(zhǔn)備好掂摔,而不是等到請(qǐng)求更新的時(shí)候再生成差分包。

二赢赊、現(xiàn)有增量更新實(shí)現(xiàn)方案????

1乙漓、BSDiff/Patch???

????這個(gè)實(shí)現(xiàn)方案是最多的,網(wǎng)上一大堆都是這個(gè)方案的實(shí)現(xiàn)释移,Android系統(tǒng)也整合了這個(gè)實(shí)現(xiàn)叭披。更多資料可參考Binary diff/patch?

2、HPatch

????博客資料參考開(kāi)源我的基于字節(jié)的數(shù)據(jù)補(bǔ)丁算法庫(kù)HDiffPatch玩讳,GitHub代碼資源:HDiffPatch涩蜘,這份代碼資源也提供了三個(gè)實(shí)現(xiàn)方案的對(duì)比測(cè)試,但是不是基于Android APK文件的差分熏纯,所以測(cè)試結(jié)果數(shù)據(jù)跟下面的測(cè)試結(jié)果有差異同诫。

????另附上:HDiffPatch和BSDiff/Patch兩個(gè)方案Android Demo實(shí)現(xiàn)GitHub代碼資源,解決了不熟悉C開(kāi)發(fā)的環(huán)境編譯配置問(wèn)題樟澜。

3剩辟、XDelta

????參考XDelta官網(wǎng),這邊需要注意的是必須基于3.0.4版本往扔,最新的版本編譯生成的SO得到的測(cè)試結(jié)果有問(wèn)題贩猎,生成的差分包很大,差分包的合成也有問(wèn)題萍膛,對(duì)比了兩個(gè)版本的代碼吭服,只在幾個(gè)小地方的處理邏輯有差異,那些邏輯看著也不像是導(dǎo)致問(wèn)題的原因蝗罗,如果有熟悉XDelta和C開(kāi)發(fā)的大神知道原因煩告知下原因艇棕。

4、Courgette

????用在Chrome 瀏覽器的更新上串塑,在BSDiff/BSPatch基礎(chǔ)上改進(jìn)的沼琉,性能更優(yōu),But...不適用于Android APK更新桩匪,詳細(xì)可參考Courgette測(cè)試報(bào)告打瘪。

????想要了解更多Courgette的內(nèi)容可參考Courgette官方文檔


>> 完整內(nèi)容見(jiàn)個(gè)人博文:Android 增量更新全解



掃碼關(guān)注公眾號(hào)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闺骚,隨后出現(xiàn)的幾起案子彩扔,更是在濱河造成了極大的恐慌,老刑警劉巖僻爽,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虫碉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胸梆,警方通過(guò)查閱死者的電腦和手機(jī)敦捧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碰镜,“玉大人绞惦,你說(shuō)我怎么就攤上這事⊙蟠耄” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵杰刽,是天一觀的道長(zhǎng)菠发。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贺嫂,這世上最難降的妖魔是什么滓鸠? 我笑而不...
    開(kāi)封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮第喳,結(jié)果婚禮上糜俗,老公的妹妹穿的比我還像新娘。我一直安慰自己曲饱,他們只是感情好悠抹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著扩淀,像睡著了一般楔敌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驻谆,一...
    開(kāi)封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天卵凑,我揣著相機(jī)與錄音,去河邊找鬼胜臊。 笑死勺卢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的象对。 我是一名探鬼主播黑忱,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了杨何?” 一聲冷哼從身側(cè)響起酱塔,我...
    開(kāi)封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎危虱,沒(méi)想到半個(gè)月后羊娃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埃跷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蕊玷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弥雹。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垃帅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剪勿,到底是詐尸還是另有隱情贸诚,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布厕吉,位于F島的核電站酱固,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏头朱。R本人自食惡果不足惜运悲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望项钮。 院中可真熱鬧班眯,春花似錦、人聲如沸烁巫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亚隙。三九已至定踱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恃鞋,已是汗流浹背崖媚。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恤浪,地道東北人畅哑。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像水由,于是被迫代替她去往敵國(guó)和親荠呐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 在前幾年,整體移動(dòng)網(wǎng)絡(luò)環(huán)境相比現(xiàn)在差很多泥张,加之流量費(fèi)用又相對(duì)較高呵恢,因此每當(dāng)我們發(fā)布新版本的時(shí)候,一些用戶升級(jí)并不是...
    涅槃1992閱讀 5,492評(píng)論 2 39
  • 1.概述 1.1.什么是應(yīng)用增量更新 當(dāng)我們要更新一個(gè)應(yīng)用的時(shí)候媚创,以前很多更新的做法是下載一個(gè)新版本去覆蓋一個(gè)舊版...
    揚(yáng)靈閱讀 3,194評(píng)論 8 19
  • 關(guān)于作者: 李濤渗钉,騰訊Android工程師,14年加入騰訊SNG增值產(chǎn)品部钞钙,期間主要負(fù)責(zé)手Q動(dòng)漫鳄橘、企鵝電競(jìng)等項(xiàng)目的...
    稻草人_3e17閱讀 3,624評(píng)論 0 10
  • 增量更新在Android開(kāi)發(fā)中是一種很常見(jiàn)的技術(shù)瘫怜。 增量更新的原理 增量更新的原理非常簡(jiǎn)單,就是將本地apk與服務(wù)...
    re冷星閱讀 1,571評(píng)論 3 3
  • 【國(guó)內(nèi)9個(gè)浪漫小城】 1.中國(guó)最美的地方—烏鎮(zhèn)本刽;2.人間天堂—麗江古城鲸湃;3.現(xiàn)代桃源—水墨婺源 ;4.自然精粹—溧...
    何時(shí)再出發(fā)閱讀 232評(píng)論 1 0