Android 增量更新
最近的項目需求维费,最近對這個增量更新有了一些認(rèn)識,另外把增量更新的一下資料整理給大家分析一下優(yōu)勢和劣勢促王。
增量更新的原理
首先增量更新不是熱修復(fù)犀盟,兩個概念不同,增量更新就是比較兩個apk之間的二進(jìn)制差異蝇狼,生成patch包然后打入舊的apk里面從而達(dá)到生成新的apk阅畴。例如說:第一個版本是3M的apk ,第二個是8M的apk 迅耘,生成的patch包可能就在4M左右贱枣,甚至更小监署,但也不是單純的兩個apk相減的差值,有可能兩個大小差不多的apk纽哥,生成patch包可能在1M左右焦匈,這個也是看包里的改動大小。生成的 patch下載到Android設(shè)備上跟較低版本的apk合成一個新版本的apk文件昵仅,如果不出意外的話缓熟,這個生成的apk和你之前做差分的apk是一致的。這么做就會為用戶去節(jié)省很多的流量摔笤,就不會讓用戶去下載完整的apk够滑。
升級步驟
bsdiff和bspatch這些工具如何獲取和使用在后面介紹
首先通過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
無論是windows端還是Linux端都是執(zhí)行的這兩個命令
缺點
增量升級并非完美無缺的升級方式,至少存在以下兩點不足:
1.增量升級是以兩個應(yīng)用版本之間的差異來生成補丁的吕世,你無法保證用戶每次的及時升級到最新彰触,所以你必須對你所發(fā)布的每一個版本都和最新的版本作差分,以便使所有版本的用戶都可以差分升級命辖,這樣操作相對于原來的整包升級較為繁瑣况毅,不過可以通過自動化的腳本批量生成。
2.增量升級成功的前提是尔艇,用戶手機端必須有能夠讓你拷貝出來且與你服務(wù)器用于差分的版本一致的apk尔许,這樣就存在,例如终娃,系統(tǒng)內(nèi)置的apk無法獲取到味廊,無法進(jìn)行增量升級;對于某些與你差分版本一致棠耕,但是內(nèi)容有過修改的(比如破解版apk)余佛,這樣也是無法進(jìn)行增量升級的,為了防止合成補丁錯誤窍荧,最好通過md5 或者其他方式對patch包進(jìn)行完整性的校驗辉巡。
bsdiff網(wǎng)站:http://www.daemonology.net/bsdiff/
bsdiff的源碼鏈接:
這個源碼反正我是看不懂,能看懂的同學(xué)可以去研究一下蕊退,代碼變量太變態(tài)而且沒有注釋郊楣,附上源碼下載鏈接:
http://pan.baidu.com/s/1nvLe3O1 密碼:pvl4
在Ubuntu下獲取bsdiff工具
在Ubuntu下獲取bsdiff的方法很簡單直接敲bsdiff命令就可以了,如果沒有安裝就會提示你用命令? sudo apt-get install bsdiff 直接就OK了
在windows下使用bsdiff工具
bsdiff工具 :http://sites.inka.de/tesla/download/bsdiff4.3-win32.zip(32bit)
bsdiff工具源碼:?http://sites.inka.de/tesla/download/bsdiff4.3-win32-src.zip(32bit)
這個是在bsdiff上源碼上修改的能夠直接在VS上直接編譯修改有其他需求的同學(xué)可以拿來用
在Android上使用bsdiff工具
這個也是在bsdiff上源碼上修改的咕痛,通過jni調(diào)用來使用bsdiff的這些功能痢甘,其實Android上只需要使用bspatch就可以了應(yīng)該是不大會用到bsdiff這個功能反正源碼中也是都涵蓋了這兩個功能喇嘱,可以隨意使用下面附上代碼連接:鏈接:http://pan.baidu.com/s/1hsNW0Kk 密碼:f31o