編輯:關於Android編程
增量升級的原理很簡單,即首先將應用的舊版本Apk與新版本Apk做差分,得到更新的部分的補丁,例如舊版本的APK有20M,新版的有21M,更新的部分則可能只有1M左右,這裡需要說明的是,得到的差分包大小並不是簡單的相減,因為需要包含一些上下文相關的東西,使用差分升級的好處顯而易見,那麼你不需要下載完整的21M文件,只需要下載更新部分就可以,而更新部分的差分包很小,可以很大程度上減少流量的損失。
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地址
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校驗,保證基礎包的一致性。
最近在做的一個項目需要展示一個頁面,標題和內容,我以前雖然用過。但是是從手機本地數據庫讀的。現在是從公司PHP網站的服務器讀取。原來用simpleCursorAdapte
在android中提供了常見的幾種ViewGroup的實現,包括LinearLayout、Relativeayout、F
在開發中往往有要獲取聯系人列表的功能,但是這次卻不是獲取聯系人列表,而是在聯系人列表點擊單個聯系人,獲取單個聯系人的姓名和電話,並設置在指定的輸入框內,方便用戶的使用;以
Android studio 出現 Unsupported major.minor version 52.0解決辦法 最近更新了Android studio