Android的增量升级是通过jni现成的c语言bsdiff拆包和bspatch合并包。可以下载bsdiff的源码,其中bsdiff.c主要是通过一个oldApk和一个newApk,然后生成一个patch包,生成的patch包中包含标识信息,newApk的大小,差分的二进制流等信息。bspatch.c接收一个oldApk,patch,首先读取标识信息,newApk大小,生成新的newApk文件,并写入文件。写文件和读文件是调用开源库bzip2。
增量升级中动态库的生成需安装android ndk,ndk通过Android.mk文件,编译c/c++打包成so库,自动的将so和java应用打包成apk文件。
开发流程:
1、新建类PatchUpdate.java,
在类中编写native方法,并在类初始化时引入与c/c++共享库。
package com.diffpatch; public class PatchUpdate { static { System.loadLibrary("update"); } public native int patch(String oldApkPath, String newApkPath, String patchPath); }
其中“update”就是在android.mk中定义的共享库名。
2、利用Javah生成JNI头文件,编写Android.mk
编译该项目,命令行模式,进入项目目录下的bin目录然后输入
javah -jni com.diffpatch.PatchUpdate会自动的生成
com_diffpatch_PatchUpdate.h头文件
新建jni目录,将该头文件拷贝到jni目录里,其中LOCAL_SRC_FILES要引用并实现这个头文件。将bzip2源码、bsdiff、bspatch拷贝到jni目录中,编写Android.mk,如下所示:
Android.mk文件:
#引入当前目录 LOCAL_PATH := $(call my-dir) #调用CLEAR_VARS脚本清空变量 include $(CLEAR_VARS) #共享库名,在java文件中引用 LOCAL_MODULE := update LOCAL_CXXFLAGS := LOCAL_C_INCLUDES := $(LOCAL_PATH) #需动态编译的c源文件 LOCAL_SRC_FILES := com_diffpatch_PatchUpdate.c LOCAL_LDLIBS := -lz -llog include $(BUILD_SHARED_LIBRARY)
3、做完这一步以后,使用NDK生成动态库so。命令行到工程目录,在该目录下使输入NDK_HOME\ ndk-build就会自动的在lib下生成so文件,如下图所示:
4、至此,我们可以在java程序中类PatchUpdate的patch方法做apk与补丁的合并。
备注:Demo中定义的MainActivity中使用。Demo中已经生成了so文件,不用安装NDK即可安装Demo的apk。程序中需要用的old.apk,app.patch需放在sdcard/2目录下
现有的更新方式是下载一个最新的apk包,使用现有的方法只需要下载一个最新apk与当前apk的一个差分包,然后再本地进行合并生成最新的apk包即可。
升级之前,先对本地的apk做MD5或者SHA散列,得到散列值,然后与服务器中的相应版本的apk做散列值对比,若一样,则下载patch包,否则可能是本地apk文件出问题了,需要下载完全的最新apk。
相关推荐
Android增量升级DEMO(本人比较久没接触JNI这块了,当初写的DEMO比较乱,现在也没时间去重新整理,所以提供一份朋友的DEMO,在这里也感谢这位朋友!)
说明都在http://blog.csdn.net/j280560101/article/details/8930511
随着APP的越来越大,增量升级已是必不可少的方法,根据新旧版本的APP,在PC上用diff工具生成差分包, 然后把差分包放到设备上或是从服务器下载到本地,并在本地使用差分包与已安装apk,合成新版apk。通过计算MD5值,...
android 增量升级工具及代码 已经编译成功并测试通过
android增量升级local端模拟代码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android 实现增量升级,内附说明,如何生成patch文件和ndk对应的.h头文件
可以实现类似qq的升级方式,客户升级apk的时候不用下载所有的apk,只需要下载新增加的部分,然后在本地合成即可。
用于安卓应用增量升级,可以做新旧版本应用的差异包,客户端做旧包和差异包合成新的安装包
博客地址:http://blog.csdn.net/krubo1/article/details/50462934
博客地址:http://blog.csdn.net/krubo1/article/details/50463146
方案服务器端: 1、保存APK各版本及对应的MD5值(用于Android端的APK文件验证)根据新的APK生成各版本的差异包(使用bsdiff /bspatch
博客地址:http://blog.csdn.net/krubo1/article/details/50463227
Android 增量更新差分包,内含bsdiff-4.3和bzip2-1.0.5等增量更新库
主要介绍了Android增量升级的方法和原理,有需要的朋友可以参考一下
android增量升级local端模拟代码
Android APP增量升级的实现方式
简单易使用,主要包含差分包的升成和何必,只要将代码中旧版本、新版本和差分包路径填好即可, ...//旧版本路径 private String newapk = "mnt/sdcard/app2.apk";//新版本路径 private String pathapk = "mnt/sdcard...
Android APP增量升级的实现方式文档 有兴趣的同学可以在下载下来看看,
Android增量升级功能Demo,设计NDK开发知识,详情见我的博客http://blog.csdn.net/winter12071634/article/details/51249781