1.增量更新:通過差分工具生成兩個(gè)不同版本的包的差分包,當(dāng)需要時(shí)可以通過老包和差分包生成新的包
? ? 全量更新:直接給一個(gè)完整的安裝包,當(dāng)差分包很大或者版本太多時(shí),采用全量更新
?2.差分包生成:BsDiff庫:自己下載源碼編譯生成window版本exe工具,或者通過cgyWin64直接在安裝時(shí)搜索BsDiff進(jìn)行安裝
? ? ? ? ? ? ? ? ? ? ? ? ? 生成差分包:bsdiff old.apk new.apk diff.patc
? ? ? ? ? ? ? ? ? ? ? ? ? 舊包和差分包合成新包:bspatch old.apk new.apk diff.patch
? ? ? ? ? BsDiff算法(差量更新算法)思想:
? ? ? ? ? ? ? ? 利用old文件中內(nèi)容锄列,盡可能少加入新內(nèi)容來構(gòu)建新包铺坞。思路是對(duì)兩個(gè)包做子字符串匹配或用hash技術(shù)提取公共部分,將新包的剩余的部? ? ? ? ? ? 分打包成patch包职车,生成新包時(shí)用copying和insertion合成瘫俊。
3.根據(jù)差分包生成新包: 1.用BsDiff的BsPatch 2.用ApkPatchLibrary
? 4.ApkPatchLibrary合成新包:(github地址:https://github.com/cundong/SmartAppUpdates)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.配制ndk環(huán)境變量,把源碼下載悴灵,c文件mk文件還有native方法的配置都有現(xiàn)成扛芽,進(jìn)入ApkPatchLibrary\jni中,cmd->ndk-build积瞒,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?編譯生成libApkPatchLibrary.so導(dǎo)入到android工程中(不會(huì)編譯so文件的百度)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.在java文件夾下面創(chuàng)建名為com.cundong.utils的包川尖,創(chuàng)建PatchUtils工具類,定義patch native方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.加載so庫
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? static {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.loadLibrary("ApkPatchLibrary");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.服務(wù)器獲取新老版本的md5茫孔,校驗(yàn)老版本的md5叮喳,獲取應(yīng)用程序自身apk路徑? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.根據(jù)路徑跟patch的路徑,調(diào)用PatchUtils.patch()native方法生成新包
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6.校驗(yàn)新包md5
? ? *? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? 7.安裝新包