移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力。说的接地气点就是,你频繁的升级更新,有时只是修复了几个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
当前名称:AndroidApp补丁更新
文章链接:http://www.shufengxianlan.com/qtweb/news3/252053.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联