隨著應用越來越大,應用更新耗時間和流量的問題,就顯得格外突出.
在有些應用市場,例如google play,會對安裝包進行拆分和合併,來達到差分更新的目的.
首先解釋一下差分包:
差分包是apk新版本和舊版本之間的包,可以稱之為patch.
流程圖執行伺服器生成patch程式
客戶端合併安裝
原理是採用的是bsdiff,而它是乙個優秀的開源c庫,大家可以去看下
windows 上的bsdiff
4.將patch資料打上新資料的標籤,重新打包生成apk.patch.
1.分析bsdiff.cpp原始碼,找到main入口
/*閱讀原始碼得知,此處第乙個引數argc必須是4,ar**是乙個字串指標陣列*/
/***如下,此處需要四個引數 1.隨便的值,2.ldfile 3.newfile 4.patchfile***************************/
int bsdiff_main(int argc,char *ar**)
如何生成,請參照下面的教程
jni開發極簡教程
6.將dll.放入web工程的根目錄.將應用生成的兩個新舊apk放到指定目錄,執行即可c生成差分包apk.patch
詳情參照我的** --增量更新github
這裡寫描述
1.編寫native方法,生成標頭檔案(別忘了新增相應許可權).
這裡寫描述
2.新增本地支援
博文請參考eclipse搭建ndk開發環境
3.將bzip2原始碼,bspatch.c引入到專案的jni目錄,並且將android.mk中的bspatch.cpp改為bspatch.c
這裡寫描述
4.修改bspatch.c原始碼,並實現native方法.
//合併
(jnienv *env, jclass jcls, jstring oldfile_jstr, jstring newfile_jstr, jstring patchfile_jstr)
public class mainactivity extends activity
});}
class apkupdatetask extends asynctask catch (exception e)
return true;
}@override
protected void onpostexecute(boolean result) }}
}
執行伺服器生成patch程式
伺服器合併安裝
socket伺服器端
伺服器 include winsock2.h include string.h include stdio.h include time.h include stdarg.h include stdlib.h pragma comment lib,ws2 32 void errexit const ...
kerberos伺服器端
1.安裝tcl wget tar zvxf tcl8.5.12 src.tar.gz cd tcl8.5.12 cd unix configure make make install 3.解壓 tar xvf krb5 1.10.3 signed.tar tar zvxf krb5 1.10.3.t...
C tcp伺服器端
伺服器端 include stdafx.h include winsock2.h pragma comment lib,ws2 32.lib include using namespace std int tmain int argc,char ar 建立套接字 sserver socket af ...