●功能版本:增量更新是Google 4.1增加的新功能
●功能背景:
现在的安卓Apk越来越大,而在此之前如果用户发现有新版本的话,需要重新把对应程序的新版本下载下来,有时候并不是重大更新,仅仅只是优化了一下,用户就需要重新下载apk,不仅浪费流量而且浪费时间(等同于浪费生命啊,亲!!!),有这样的问题,便会出现更优的功能迭代即增量更新或增量升级,或者叫差异化更新,目前很多应用商店已经对接了此功能:比如谷歌官方,小米等等。。。
●实现原理:
客户端与服务端对比,并生成版本之间的差异包,用户不用下载整个apk文件,只用下载差异包就可以了,比如用户微博2.0升级到微博3.0,本来微博3.0版本应该是10M,服务器通过生成差异包4M,用户直接下载4M文件并在本地进行合并生成微博3.0版本,安装,对于网络环境较差的用户绝对提高用户体验,节省流量和时间
(服务端+客户端)实现思路:
1.客户端带着VerisionCode发送请求给服务端
2.服务端判断VersionCode是否是最新版本,如果不是检测是否有此版本和最新版本的差异包,如果没有则在后台生成(旧VersionCode-新VersionCode).patch文件
3.客户端收到返回数据,判断是否最新,如果不是弹出升级的Dilog对话框
4.点击立即升级,再次发送请求
5.服务端返回给客户端对应版本差异包的Url地址
6.客户端拿到URL地址下载到SD卡中,并从客户端data/app 目录下拷贝本程序的apk安装包,
7.客户端通过调用JNI编译的.so动态链接库中的方法合并旧版本和差异包,生成新版本,调用Intent方法安装最新的apk包
用到的知识点:
1.JNI相关(重点)
2.Http协议相关(次重点)
3.工厂设计模式_调用接口实现类(次重点)
●实现
假设,你的apk已经发布了3个版,1.0,2.0,3.0,这时候你要在后台发布4.0,在你上传时,就应该生成
1.0——>4.0的差异包;
2.0——>4.0的差异包;
3.0——>4.0的差异包;
选择使用这个开源二进制比较工具来实现: