Android 增量更新全解

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

一、增量更新原理

增量更新流程圖

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

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

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

2、步驟詳細(xì)展開:

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

????客戶端:用戶手動更新或程序主動請求檢測更新:

????????1)客戶端用MD5值和版本號作為參數(shù)向服務(wù)端請求更新數(shù)據(jù),若服務(wù)端沒有差分包則返回全量包下載URL、MD5值、簽名值。

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

3、需要考慮的一些問題:

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

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

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

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

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

1、BSDiff/Patch???

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

2、HPatch

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

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

3、XDelta

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

4、Courgette

????用在Chrome 瀏覽器的更新上,在BSDiff/BSPatch基礎(chǔ)上改進(jìn)的,性能更優(yōu),But...不適用于Android APK更新,詳細(xì)可參考Courgette測試報告

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


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



掃碼關(guān)注公眾號
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在前幾年,整體移動網(wǎng)絡(luò)環(huán)境相比現(xiàn)在差很多,加之流量費(fèi)用又相對較高,因此每當(dāng)我們發(fā)布新版本的時候,一些用戶升級并不是...
    涅槃1992閱讀 5,574評論 2 39
  • 1.概述 1.1.什么是應(yīng)用增量更新 當(dāng)我們要更新一個應(yīng)用的時候,以前很多更新的做法是下載一個新版本去覆蓋一個舊版...
    揚(yáng)靈閱讀 3,515評論 8 19
  • 關(guān)于作者: 李濤,騰訊Android工程師,14年加入騰訊SNG增值產(chǎn)品部,期間主要負(fù)責(zé)手Q動漫、企鵝電競等項目的...
    稻草人_3e17閱讀 3,886評論 0 10
  • 增量更新在Android開發(fā)中是一種很常見的技術(shù)。 增量更新的原理 增量更新的原理非常簡單,就是將本地apk與服務(wù)...
    re冷星閱讀 1,664評論 3 3
  • 去鄉(xiāng)千里,思鄉(xiāng)尤甚,遙想當(dāng)年青城城外,十里桃花,桂亭下,把酒話天涯。 歸期遙遙,路途迢迢,君不見異鄉(xiāng)獨(dú)行路,日月行...
    己摯閱讀 511評論 3 5

友情鏈接更多精彩內(nèi)容