增量升级(省流量更新)的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
  • 5634

Android增量更新——bsdiff&bspatch

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

Android 增量更新 bsdiff bspatch

最初的增量更新应该是Google Play在Google IO 2012 上提出来的,现在被各大应用市场广泛使用。 最近我们也需要用到这个技术,所以研究一下下~ http://k...
  • song_shi_chao
  • song_shi_chao
  • 2014年03月13日 17:20
  • 10619

android 增量更新 bsdiff\bspatch库编译

具体思路参考 http://blog.csdn.net/hmg25/article/details/8100896 jni提供的接口: public native...
  • goodding
  • goodding
  • 2013年06月18日 12:43
  • 8516

eclipse实现JavaWeb项目 增量打包

很多情况下,项目是不允许全量发布的,所以你得把有做修改的文件一个个挑出来,如果有成千上百的文件,你是不是要头大了? 以下方法应该可以让你得到解救!前提是你是用装有svn plugin的eclipse上...
  • lyhjava
  • lyhjava
  • 2016年11月03日 14:13
  • 3326

eclipse实现JavaWeb应用增量打包

很多情况下,项目是不允许全量发布的,所以你得把有做修改的文件一个个挑出来,如果有成千上百的文件,你是不是要头大了? 以下方法应该可以让你得到解救!前提是你是用装有svn plugin的eclipse上...
  • school11
  • school11
  • 2014年12月05日 11:23
  • 1978

ideploy 打包工具javaweb 增量打包工具

  • 2017年11月03日 20:41
  • 1.19MB
  • 下载

实现应用的增量更新\升级

转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/50579859 增量升级的背景 虽然很多App的版本更新并不频繁,但是...
  • zb872676223
  • zb872676223
  • 2016年06月28日 19:08
  • 1206

Windows中使用bsdiff

bsdiff是一个差异包比较工具,可以用来实现Android的增量更新,详情请见这篇文章Android 增量更新完全解析 是增量不是热修复。只是这篇文章的背景是基于mac系统的,关于其第二步——增量文...
  • z191726501
  • z191726501
  • 2016年10月12日 23:25
  • 2805

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

采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端&客户端
  • u014608640
  • u014608640
  • 2017年08月28日 17:39
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:增量升级(省流量更新)的Java服务端实现
举报原因:
原因补充:

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