Android App补丁更新

移动开发 Android
上一周比较忙,忙的不可开交,写的文章也就两篇,在此希望大家见谅。这周呢,突然闲下来了,有时间了,就重构了下代码,捣鼓点前卫的技术,沉淀沉淀。所以呢,今天就分享下这几天研究的东西。

移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力。说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面,就让用户下载10几兆甚至更大的apk,而且在目前国内这个4G还不是普及的时候,对用户来说是很不友好的。有没有这样一种策略呢,就如windows系统上打补丁一样,通过体积比较小的补丁来完善系统存在的bug或者新功能的实现,如果可以实现的话,用户就再不会苦着脸去更新app了。答案是肯定的,要实现这个功能,需要以下两个步骤。

一、比对新版本与老版本之间的差异,***只下载差异的部分

思路很简单,也非常清晰,那我们就照着这个目标行进。apk本身其实是一个zip压缩包,你改下后缀名,再双击解压就能得到apk内部的编译打包后的文件,图片音频等文件是直接可以可读的,其他的就得通过反编译工具去查看了。所以我们应用的安装文件apk就是一个二进制文件,如何得到两个二进制文件的差异文件---差异包呢?好消息是已经有前人实现了,它的名字bsdiff,一个差异包比较工具,全称是binary diff,二进制差异的意思。通过bsdiff,我们就能得到两个apk的差异包了,下面我会把整理的命令文件打包到代码中上传Github上供大家使用的。bsdiff为我们提供的仅是一组用C实现的代码,需要自己去编译构建,我已经为大家准备了windows、OSX、Linux不同平台下使用的命令。

由于我的电脑是macbook,执行命令如下

执行命令之后,得到xx.patch,我们下面要下载的就是这个差异包。根据不同版本之间的差异,相对整个apk来说,差异包的体积会小很多。同时如果你 的应用老版本有多个的话,你就需要生成对应的多个差异包。如果要想生成的流程自动化的话,找后台的哥们配合下就能轻松解决。

二、手机本地下载差异包,再和旧版本apk进行合并,***合并成新版本apk。

根据当前版本号,向服务器发起请求,就得下载到对应的差异包。下面就是旧版本apk和patch合并的一步了,由于java本身并没有提供相应的api, 我们需要C去帮助实现,然后生成.so包进行调用。相对于生成差异包的bsdiff,也给提供了另一个bspatch,这个就是帮助我们进行文件和平的。 如果要在Android中实现这一步,就需要去配置NDK的开发环境了,如果不想的同学可以直接把demo里面的.so文件拿出来用。调用下面的这个方法 就可以实现文件的合并

合并出的apk文件,与***的安装包并无区别,具有同样的特征值。***通过Intent进行安装。

写在***:有可能有的用户所使用的版本比较老,与***的apk相差很大的话,还是建议根据生成差异包的大小进行判定是否去直接下载apk进行更新。同时根 据不同版本对应不一样的差异包,和后端的小伙伴合作去自动化生成的话,大大减少了生成差异包时间上的浪费。***如果只是修复关键性bug或者几个新需求的 添加,产生的差异包会很小,也会大大的减少了用户的下载时间和流量消耗。

源码地址:https://github.com/JackCho/AndroidPatchUpdate

本文链接:http://my.oschina.net/jack1900/blog/301330

责任编辑:chenqingxiang 来源: oschina
相关推荐

2022-05-08 23:17:26

漏洞补丁Android

2011-08-01 09:39:57

Office 2010更新失败修正

2023-05-26 19:53:30

Android 14谷歌

2011-09-08 12:05:21

2017-10-16 10:06:21

Windows 10Windows更新补丁

2010-01-14 20:29:51

2009-07-16 10:14:38

Oracle关键补丁

2010-01-15 10:42:40

2015-10-26 22:47:26

补丁Oracle漏洞修复

2009-10-21 14:40:56

2015-07-09 15:04:53

JSPatch动态更新ios app

2013-05-20 17:40:30

Java安全Java补丁更新甲骨文

2013-05-17 09:39:38

2011-06-01 10:06:14

2015-06-05 09:42:28

2018-11-15 09:00:31

Windows 8.1Windows 7补丁

2016-08-01 11:07:51

Oracle漏洞

2013-10-10 13:05:46

Windows 7微软更新

2010-06-23 20:21:42

微软Windows 7补丁

2010-03-11 09:09:09

Windows 7补丁更新
点赞
收藏

51CTO技术栈公众号