关闭

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

标签: 增将升级省流量更新java增将升级java省流量更新java bsdiff
1329人阅读 评论(0) 收藏 举报
分类:

用过类似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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15932次
    • 积分:316
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:8篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论