当前位置: 首页 > 科技观察

AndroidApp补丁更新

时间:2023-03-12 11:24:25 科技观察

移动互联网注重用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,保持活力和创造力。接地气的一点就是你频繁的升级更新,有时候只是修复几个bug或者微调下层界面,让用户下载10兆甚至更大的apk,而在4G还没有的当下在中国流行,这对用户很不友好。有没有这样一种策略,就像在windows系统上打补丁一样,通过比较小的补丁来改善系统的bug或者新功能的实现,如果能够实现,用户就不用再苦苦更新app了面对。答案是肯定的,要实现这个功能,需要以下两个步骤。1.对比新旧版本的不同点,只下载不同点的思路很简单明了,所以我们就按照这个目标来做。apk本身其实就是一个zip压缩包。可以修改后缀名,然后双击解压得到apk里面的编译打包文件。图片、音频等文件可以直接读取,其他文件需要反编译。一探究竟。那么我们应用的安装文件apk是一个二进制文件,如何获取两个二进制文件的差异文件---差异包呢?好消息是它已经被前人实现了。它的名字叫bsdiff,一个差异包比较工具,全称binarydiff,意思是二进制差异。通过bsdiff,我们可以得到两个apk的差异包。接下来我会把整理好的命令文件打包成代码上传到Github上供大家使用。bsdiff给我们提供的只是一组用C实现的代码,需要我们自己编译构建。我已经为你准备了在windows、OSX、Linux不同平台下使用的命令。由于我的电脑是macbook,执行如下命令后得到xx.patch,也就是我们接下来要下载的差异包。根据不同版本之间的差异,差异包的大小会比整个apk小很多。同时,如果你有多个旧版本的应用,你需要生成多个对应的差分包。如果想把生成的流程自动化,在后台小伙伴的配合下,可以轻松解决。2.手机本地下载差异包,然后与旧版apk合并,最后合并成新版apk。根据当前版本号,当向服务器发起请求时,必须下载相应的差异包。下面是合并老版本apk和patch的步骤。由于java本身没有提供相应的api,所以我们需要C来帮助实现,然后生成.so包进行调用。相对于生成差异包的bsdiff,还提供了另外一个bspatch,就是帮助我们进行文件和平。如果要在Android中实现这一步,需要配置NDK开发环境。如果不想,可以直接使用demo中的.so文件。调用如下方法实现文件的合并。合并后的apk文件与***的安装包没有区别,具有相同的特征值。***通过Intent安装。写在***:有可能部分用户使用的是旧版本,如果与***apk相差较大,建议根据大小判断是否直接下载apk进行更新生成的差异包。同时根据不同的版本对应不同的差异包,如果我们配合后端小伙伴自动生成,大大减少了生成差异包的时间浪费。***如果只修复严重的bug或者增加一些新的需求,差异包会很小,用户的下载时间和流量消耗会大大减少。源码地址:https://github.com/JackCho/AndroidPatchUpdate