增量升级(省流量更新)的Java服务端实现

原创 2015年04月23日 17:02:10

用过类似360手机助手应该对省流量更新都很熟悉了。详细资料可以参考以下两个帖子:

浅析android应用增量升级

Android应用增量升级


本文需要详细说的是服务端的实现。即服务端如何用JAVA实现生成增量包的过程。


环境准备:

Linux服务器、bsdiff安装包


由于线上服务器是使用Linux服务器,需要在Linux服务器上安装bsdiff,详细的安装过程可自行GOOGLE


生成增量升级包主要是调用bsdiff工具。调用方法有两种:

一是通过JNI调用。对JNI不了解的可以先了解下JNI。JNI调用可参见文章http://blog.csdn.net/sgwhp/article/details/8872941

二是通过java调用命令行,使用用apache的CommandLine。关键代码如下:

CommandLine commandLine = getBsdiffCommand();
			commandLine.addArgument( "${old.file}" );
			commandLine.addArgument( "${new.file}" );
			commandLine.addArgument( "${patch.file}" );
			HashMap<String, Object> parameter = new HashMap<String, Object>( 3 );
			parameter.put( "old.file", oldTmpFile );
			parameter.put( "new.file", newTmpFile );
			parameter.put( "patch.file", outFile );
			commandLine.setSubstitutionMap( parameter );
			executeCommand( commandLine );

	private CommandLine getBsdiffCommand() {
		String command = "bsdiff";
		CommandLine commandLine = null;
		if( OS.isFamilyWindows() ) {
			command = command + ( OS.isFamilyWindows() ? ".exe" : "" );
			commandLine = new CommandLine( "cmd" );
			commandLine.addArgument( "/c" );
			commandLine.addArgument( command );
		} else {
			commandLine = new CommandLine( command );
		}
		return commandLine;
	}

	private void executeCommand( CommandLine commandLine ) throws Exception {
		DefaultExecuteResultHandler executeResultHandler = new DefaultExecuteResultHandler();
		ExecuteWatchdog watchdog = new ExecuteWatchdog( TIME_OUT );
		Executor executor = new DefaultExecutor();
		executor.setExitValues( new int[] { 0, 1 } );
		executor.setWatchdog( watchdog );
		executor.execute( commandLine, executeResultHandler );
		executeResultHandler.waitFor();
		ExecuteException exception = executeResultHandler.getException();
		if( null != exception ) {
			throw exception;
		}
		logger.info( "Command{} exit value[{}]", commandLine.getExecutable(), executeResultHandler.getExitValue() );
	}

代码说明:

bsdiff命令的使用方法:bsdiff oldfile newfile patchfile

getBsdiffCommand()方法返回CommandLine并在CommandLine中加入命令的开头,

如果是linux系统,则命令开头是bsdiff

我们

如果是windows系统。则命令开头是cmd /c bsdiff

executeCommand( CommandLine commandLine )方法是执行命令行commandLine 的方法



增量升级参考文档汇总:

1.http://blog.csdn.net/sgwhp/article/details/8872941

2.http://www.mythroad.net/2014/05/14/android-app%E5%BA%94%E7%94%A8%E5%B8%82%E5%9C%BA-apk%E5%A2%9E%E9%87%8F%E6%9B%B4%E6%96%B0%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88%E9%98%90%E8%BF%B0/

3.http://blog.daxuxu.info/2014/07/%e4%ba%8c%e8%bf%9b%e5%88%b6%e5%b7%ae%e9%87%8f%e5%b7%a5%e5%85%b7%e5%b7%a5%e5%85%b7bsdiff-%e5%ae%89%e8%a3%85%e4%bd%bf%e7%94%a8.html

4.http://kinggoo.com/bsdiffupdate.htm

5.http://blog.csdn.net/hmg25/article/details/8100896

6.http://blog.csdn.net/zhangyadick18/article/details/39641835

7.https://github.com/cundong/SmartAppUpdates

8.http://233.io/article/1034642.html

增量升级(省流量更新)的Java服务端实现

By sgwhp (http://blog.csdn.net/sgwhp)转载请注明出处 用过类似360手机助手应该对省流量更新都很熟悉了。详细资料可以参考以下两个帖子: 浅析android应用增...
  • sgwhp
  • sgwhp
  • 2013年05月02日 02:24
  • 5287

增量更新:bsdiff工具的安装和使用

bsdiff是实现App增量更新的重要工具,所以安装是很有必要的(感觉是个废话,哈哈)。 在 搜索引擎里搜索bsdiff,立马能看到相关的信息,看着个比较靠谱的官网: http://www.dae...

HDiffPatch和BsDiff4.3&xdelta3.1的对比测试

HDiffPatch和BsDiff4.3&xdelta3.1的对比测试 HDiff比BsDiff 生成的diff数据更小(一般小15%以上),速度更快(一般只需要1/4多时间),占用内存更小(一般只...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Bsdiff增量更新实现

鸿大《Android 增量更新完全解析 是增量不是热修复》 wzben《呕心沥血Android studio使用JNI实例》 本来还想跟着鸿大的脚步,尝试自己编译Bsdiff的,无奈自己用的...
  • xFank
  • xFank
  • 2016年10月21日 14:02
  • 432

采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端&客户端

采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端&客户端

增量更新---服务端与客户端的处理方案

前言如果要对一个 APP 进行更新,你会怎么做呢,或许你的宿主 App 有若干功能,每一个功能都是一个插件,每次在功能更新的时候,直接更新插件就好,但是这种方式也有局限,它不能进行宿主程序更新,对于非...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android增量更新——bsdiff&bspatch

为了节省流量,增量更新应运而生,用这篇文章来记录下运用patch差分包的形式实现无脑增量更新。为了方便,就将生成差分包和差分包与旧apk合并这两个过程都放在安卓机上完成......

[差量更新系列1]BSDiff算法学习笔记

[差量更新系列1]BSDiff算法描述     BSDiff是一个差量更新算法,它在服务器端运行BSDiff算法产生patch包,在客户端运行BSPatch算法,将旧文件和patch包合成新...
  • add_ada
  • add_ada
  • 2016年04月24日 12:12
  • 5898
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:增量升级(省流量更新)的Java服务端实现
举报原因:
原因补充:

(最多只允许输入30个字)