bsdiff&bspatch增量更新概念介紹

隨着Android生態,技術愈來愈成熟,目前市場不少Android的項目工程很大,團隊人數多,慢慢衍生出了許多組件化插件化技術。android

同時也由於Android安裝包apk也在逐漸增大,每次發佈,用戶更新apk環境複雜,若是全量更新下載apk的話在使用流量狀況下,網絡環境很差等等,對於用戶體驗是很是很差的。git

首先區分下幾個概念

組件化 : 把經常使用的模塊代碼,抽取lib工程或者jar達到複用的效果。github

插件化:目的是把須要實現的模塊或功能當作一個獨立的提取出來,減小宿主的規模,當須要使用到相應的功能時再去加載相應的模塊。涉及動態代理,ClassLoader,以及另外一個apk資源的加載。例如:360的DroidPlugin (推薦)服務器

熱修復:每每是從修復bug的角度出發,強調的是在不須要二次安裝應用的前提下修復已知的bug(涉及關鍵詞:Hook技術、動態代理等)。例如:阿里 AndFix。網絡

增量更新:APK增量更新是不少大廠APP採用的技術。bsdiff庫生成補丁文件方式下載跟舊版本APK合成生成新版APK的原理(ligbspatch.so)。手機遊戲app增量更新使用較多。例如:SmartAppUpdatesapp


bsdiff&bspatch

bsdiff生成patch -> bzip2壓縮 -> android下載patch -> bzip2解壓patch -> bspatch合併patch -> 新的apk組件化

bsdiff並非專門爲apk增量更新設計的,它能夠對任何二進制文件進行差分和合並。編碼

bzip2的功能是利用哈夫曼編碼對文件進行無損壓縮(將差分包進行壓縮便於網絡傳輸)和解壓。spa

流程:.net

  • 在服務器端,生成兩個版本apk的差分包;
  • 在手機客戶端,使用已安裝的apk與這個差分包進行合成,獲得新版的apk;
  • 校驗新合成的apk文件是否完整,MD5或SHA1是否正確,如正確,則引導用戶安裝;

經常使用命令

bsdiff 生成patch包 命令:bsdiff oldfile newfile patchfile 例如: bsdiff xx_v1.0.apk xx_v2.0.apk xx.patch

bspatch生成新的APK: 命令: bspatch oldfile newfile patchfile 例如: bsdiff xx_v1.0.apk xx_v2.0.apk xx.patch

使用

Android增量更新——bsdiff&bspatch

缺點:

增量升級並不是天衣無縫的升級方式,至少存在如下兩點不足:

  • 增量升級是以兩個應用版本之間的差別來生成補丁的,你沒法保證用戶每次的及時升級到最新,因此你必須對你所發佈的每個版本都和最新的版本做差分,以便使全部版本的用戶均可以差分升級,這樣操做相對於原來的整包升級較爲繁瑣,不過能夠經過自動化的腳本批量生成。

  • 增量升級成功的前提是,用戶手機端必須有可以讓你拷貝出來且與你服務器用於差分的版本一致的apk,這樣就存在,例如,系統內置的apk沒法獲取到,沒法進行增量升級;對於某些與你差分版本一致,可是內容有過修改的(好比破解版apk),這樣也是沒法進行增量升級的,爲了防止合成補丁錯誤,最好經過md5 或者其餘方式對patch包進行完整性的校驗。

相關文章
相關標籤/搜索