Android差分升級原理和實現方式

來源:互聯網
上載者:User

標籤:

增量升級概述

增量升級的原理很簡單,即首先將應用的舊版本Apk與新版本Apk做差分,得到更新的部分的補丁,例如舊版本的APK有20M,新版的有21M,更新的部分則可能只有1M左右,這裡需要說明的是,得到的差分包大小並不是簡單的相減,因為需要包含一些上下文相關的東西,使用差分升級的好處顯而易見,那麼你不需要下載完整的21M檔案,只需要下載更新部分就可以,而更新部分的差分包很小,可以很大程度上減少流量的損失。

Apk增量升級過程

1、  在伺服器上產生一個patch。
2、  下載patch到手機中。
3、  通過補丁擷取一個已安裝應用的新的安裝apk。
4、  安裝應用的新版本並刪掉舊的版本和patch。

如何產生差分包

通常使用bsdiff來製作差分包。

bsdiff oldfile newfile patchfile
差分包通常在伺服器端產生,然後下發到用戶端。

原始碼是C語言實現的。

bsdiff源碼

可以通過jni在java代碼中調用C代碼,產生差分包

bsdiff

如何合成新的升級包

bspatch的命令格式為: 

bspatch oldfile newfile patchfile 

android在data/app目錄下會有原APK的備份,用原apk的備份和伺服器的patch包可以合成新的apk。但是要注意版本控制,patch包一定是最終要合成的apk與原apk的差分包。原來的版本不同,升級後的版本不同,使用的差分包肯定也不是一個。

代碼實現

github上有個很好的開源項目,smartAppUpdate已經對bsdiff和bspatch做了很好的封裝,可以直接使用。

SmartAppUpdate的GitHub地址

bsdiff的改進

google chrome項目中對bsdiff進行了改進

代碼實現地址:

https://chromium.googlesource.com/chromium/src/courgette/+/master

資料對比

Here are the sizes in bytes for the recent 190.1->190.4 update on the developer channel:Full update                 10,385,920bsdiff update               704,512Courgette update        78,848

增量升級的不足

 增量升級並非完美無缺的升級方式,至少存在以下兩點不足:
 1.增量升級是以兩個應用版本之間的差異來產生補丁的,你無法保證使用者每次的及時升級到最新,所以你必須對你所發布的每一個版本都和最新的版本作差分,以便使所有版本的使用者都可以差分升級,這樣操作相對於原來的整包升級較為繁瑣,不過可以通過自動化的指令碼批量產生。
 2.增量升級成功的前提是,使用者手機端必須有能夠讓你拷貝出來且與你伺服器用於差分的版本一致的apk,這樣就存在,例如,系統內建的apk無法擷取到,無法進行增量升級;對於某些與你差分版本一致,但是內容有過修改的(比如破解版apk),這樣也是無法進行增量升級的,為了防止合成補丁錯誤,最好在補丁合成前對舊版本的apk進行sha1sum校正,保證基礎包的一致性。



歡迎掃描二維碼,關注公眾號



Android差分升級原理和實現方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.