Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android差分升級原理和實現方式

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

編輯:關於Android編程

增量升級概述

增量升級的原理很簡單,即首先將應用的舊版本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,920
bsdiff update               704,512
Courgette update        78,848

 

增量升級的不足

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved