# updata **Repository Path**: seek_admin/updata ## Basic Information - **Project Name**: updata - **Description**: 使用bsdiff实现增量更新 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-12 - **Last Updated**: 2022-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # updata #### 介绍 使用bsdiff实现增量更新 https://blog.csdn.net/u011109881/article/details/118325857 下载:http://www.daemonology.net/bsdiff/ 1.解压 root@ecs-83255:/android/bsdiff# tar -zxvf bsdiff-4.3.tar.gz 2.Make 修改MakeFile root@ecs-83255:/android/bsdiff/bsdiff-4.3# vim Makefile ``` CFLAGS += -O3 -lbz2 PREFIX ?= /usr/local INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555 INSTALL_MAN ?= ${INSTALL} -c -m 444 all: bsdiff bspatch bsdiff: bsdiff.c cc bsdiff.c ${CFLAGS} -o bsdiff 添加这个 bspatch: bspatch.c cc bspatch.c ${CFLAGS} -o bspatch 添加这个 install: ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin .ifndef WITHOUT_MAN 这里这里使用tab键 ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1 .endif 这里这里使用tab键 ``` 3.生成差分包 bsdiff ./bsdiff v1.apk v2.apk v1-v2.patch 4.合成新apk bspatch ./bspatch v1.apk new.apk v1-v2.patch 5.android创建c++项目copy .c文件(bsdiff.c 用于生产差分包一般放在服务端使用,bspatch用于利用差分包合成新的apk文件) ![输入图片说明](https://foruda.gitee.com/images/1665563392544400477/4e7ea6c8_632426.png "屏幕截图") 6.bspatch依赖 bzip文件 需要下载bzip源码 ![输入图片说明](https://foruda.gitee.com/images/1665563533827425637/96228fa5_632426.png "屏幕截图") 下载bzip https://www.sourceware.org/bzip2/downloads.html ![输入图片说明](https://foruda.gitee.com/images/1665563561060705176/417d08b3_632426.png "屏幕截图") 将bzip2导入cpp文件夹 ![输入图片说明](https://foruda.gitee.com/images/1665563619403044590/e4739005_632426.png "屏幕截图") cmakefile配置导入的文件 ![输入图片说明](https://foruda.gitee.com/images/1665563658240881555/0f9a41e5_632426.png "屏幕截图") 修改bspatch.c 和bsdiff.c的main方法名称 并进行声明引用 ![输入图片说明](https://foruda.gitee.com/images/1665563771515284062/6f98da7d_632426.png "屏幕截图") 调用的地方进行声明引用 ![输入图片说明](https://foruda.gitee.com/images/1665563922461438041/b86085db_632426.png "屏幕截图") 创建native方法进行调用 ``` JNIEXPORT jint JNICALL Java_native_BspatchUtil_00024Companion_patch(JNIEnv *env, jobject thiz, jstring path_old, jstring path_new, jstring patch) { const char* old_path = env->GetStringUTFChars(path_old,0); const char * new_path = env->GetStringUTFChars(path_new,0); const char * patch_path = env->GetStringUTFChars(patch,0); int argc = 4;//参数个数 char *argv[argc];//参数列表 // ./bspatch 1.apk new.apk 1-2.patch argv[0] = "bspatch"; argv[1] = const_cast(old_path); argv[2] = const_cast(new_path); argv[3] = const_cast(patch_path); int result = patch_main(argc,argv); env->ReleaseStringUTFChars(path_old, old_path); env->ReleaseStringUTFChars(path_new, new_path); env->ReleaseStringUTFChars(patch, patch_path); return result;//0表示成功 } } ``` 7.成果 ![![输入图片说明](https://foruda.gitee.com/images/1665564279743289683/9d577d37_632426.j![输入图片说明](https://foruda.gitee.com/images/1665564302756458964/8d14400a_632426.jpeg "Screenshot_2022-10-12-16-41-36-50_7dbf4e2df42303df52cae8a2df2d3726[2].jpg")peg "Screenshot_2022-10-12-16-41-20-39_bb8ece83317b06ec453d187d61792a56[1].jpg")](https://foruda.gitee.com/images/1665564217880251553/bdf8d985_632426.jpeg "Screenshot_2022-10-12-16-40-45-24_7dbf4e2df42303df52cae8a2df2d3726[1].jpg")