Android 增量升级学习使用记录

6 篇文章 0 订阅
6 篇文章 0 订阅

Android 增量升级原理以及实现测试

好久没有发博客了,现在工作忙了,底层代码跟踪学习的东西很久没有做成文档了,虽然博客写的烂,但是再写的过程中,能更清晰的认识到自己那个地方还不清晰,不明白。这样能更好的嘴一个反馈和记录。所以,还是要继续努力……
Android增量升级,一个比较好玩的内容,几年前做项目的时候做过预研,但是没有真正应用到项目中去。所以仅仅测试了一下,但是那时候感觉增量升级好像不怎么靠谱,就没有继续深入。这一次由于系统要求android必须要有增量升级,所以又捡起来学习一下。当然核心的库用的是第三方,我们也只是在拾人牙慧,将其应用到自己系统中而已。所有参考资料见最后。
1. 增量升级原理
增量升级的原理比较简单,主要是比较两个不同版本的二进制文件,然后生成两个版本的差分包,再将差分包与低版本合成即可生成高版本的安装apk文件。具体实现细节如下下节。
2. 增量升级实现
增量升级按照原理所述,要先生成差分包,在合成差分包。一般生成差分包是在后台服务器生成,合成差分包是在android机器本地合成。差分包主要指的是新版本(V1)与android机器上已经安装的老版本(V0)之间的差分,为了方便测试,我们模拟服务器端(server)生成差分包(V1-V0=P),然后在本地端(local)合成包(V1)。当然在差分,合成的时候还有一些细节,比如MD5验证等。具体的流程如下图所示:
这里写图片描述

如上图所示,其中填充淡黄色的是server端的流程,主要是生成差分包和MD5值,剩下的是android手机local端流程,该流程是一个比较完成的升级流程。我们在做测试的时候不用这么多流程,只要完成差分包、合成包、MD5校验、成功安装即可。下面将按照功能分成两个部分来做测试,一部分是模拟server端,一部分是android手机local端。
2.1 Server端实现
(1) 生成差分so包
主要的C部分代码来自参考地址1,这里只是自己生成头文件和头文件的实现文件,头文件实现文件也参考地址1中的代码。这里仅仅改了包名。
首先创建工程,添加java类DiffUtils,工程与代码如下:
这里写图片描述

这里写图片描述

然后,用javah命令生成头文件,当然可以自己配置eclipse一键生成,javah命令如下:
javah -jni -encoding utf-8 com.woniu.difflibrary.DiffUtils
执行命令以后如果没错无,刷新工程可以发现多了一个头文件,在工程目录下建立jni文件夹,将头文件拷贝到jni下面,然后将参考地址1中的实现代码考进来,注意,将参考代码中的h头文件换成自己刚刚生成的。
这里写图片描述

现在,将差分包需要的第三方c代码都拷贝到jni目录下,整个工程目录如下:
这里写图片描述

第三步,就是编写mk文件并利用ndk生成so包,mk文件包括上图所示的Android.mk还有Application.mk。
Application的mk文件主要是配置生成so包的环境。我们要生成arm和x86的,所以配置如下:另外两个参数表示当前适配版本以及使用的是STLport静态连接库,配置项参数意义以及其他参数值可自行百度google。
这里写图片描述

Android.mk在这边配置比较简单,就是将实现文件加进来WoniuAPKDiffLibrary就是生成的so包的名称:libWoniuAPKDiffLibrary.so
这里写图片描述

最后,到android.mk的目录下执行nkd-build命令,ndk的配置可以搜一下,比较简单。执行结束,如果没有错误就可生成两个libWoniuAPKDiffLibrary.so文件,分别是arm和x86平台下的。如下入的两个so包。如果使用so包现将其拷贝到jni下面分别放到armeabi和x86下。

这里写图片描述

(2) 生成差分包
上面已经生成差分工具so包,下面就是将其加入到模拟server的工程中,模拟生成差分包。
首先,创建工程,将so包以及生成h文件的java工具类也拷贝到工程中,工程目录如下,其中so包,DiffUtils.java是上一个步骤创建生成的。

然后,自己可以随便写个小的android应用程序,并生成V0.apk,然后做一个简单的界面修改,再生成V1.apk,用这两个apk模拟差分包生成。拷贝到android手机的sdcard中。
最后,运行上述的工程,并点击start,如果没有出错将会在sdcard中生成一个V0_to_V01.patch的差分包文件。该文件大小只有原包大小的三分之一。也就是增量升级中需要的差分包。
(3) Server端小结
实际上server端的主要功能已经完成了,就是生成一个差分包。实际使用中,server端还要负责生成V1版本的MD5文件,如流程图中所示。而在我们测试中,可以将V1的MD5文件生成好并保存下来。便于合成差分包以后校验。
2.2 Local端实现
实际上,Local端的操作步骤已经与Server端比较类似,也是先生成so包,然后将so包以及相关文件拷贝的合成工程的实现代码中,并用V0和Server端生成的V0_to_V1.patch差分包合成一个V1’,然后V1’与原来的V1本尊的MD5值进行校验,如果校验通过,就表示合成成功,否则合成失败。成功了就直接安装,替换老版本的V0,失败以后,在正式环境中就要重新下载V1代码。下面简单看下具体流程:
(1) 生成合成so包
So包的生成方法与查分so包生成的步骤一样,需要先创建一个工程,然后生成h头文件和实现文件。具体操作按照上述执行即可。其中工程内容如下:
这里写图片描述

(2) 生成合成包
建立本地测试代码,注意实际使用中一般是对自己本身生成差分包,这里为了方便测试,用local程序测试其他应用。所以实际使用的时候安装完以后需要将自身的apk拷贝到一个目录下做备份,好为后续的增量升级做准备。这里就用V0代替了。V0放到sdcard下面,V0_to_V1.patch也在该目录下。Local测试程序只要将测试V0与差分包合成就行。
工程目录如下:
这里写图片描述

其中包括一些MD5值获取校验等工具类。MainActivity中,用一个Task去执行合成代码,合成以后会进行MD5值校验,所以测试之前可以先将MD5值做好,放到代码中写死。因为这个再实际使用中是由后台做好,然后通过接口获取得来的。
(3) Local端小结
这里就是是调用so包进行合成二进制文件,合成以后与原来的apk包的MD5做对比校验。校验以后可以安装。实际使用中要把自身的apk先拷贝到增量升级路径下,然后与下载下来的patch文件进行合并,然后在做校验安装。这样就完成了本地的操作了。
3. 增量升级总结
增量升级,主要核心的东西,是那些C写的代码,我们要做的就是调用别人写好的东西,然后将流程优化,并正式用于生产环境。上述用到的代码,实际上在参考地制止都有。我只是根据修妖做了修改。具体代码如下:

  1. 学习参考地址
    https://github.com/cundong/SmartAppUpdates

源码地址:
local:http://download.csdn.net/detail/wangxiaotaolhc/9630527
server:http://download.csdn.net/detail/wangxiaotaolhc/9630523

继续努力,keep moving!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值