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

移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力。说的接地气点就是,你频繁的升级更新,有时只是修复了几个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

如果觉得对你有所帮助,欢迎大家订阅我的微信公众账号——Android干货分享(ID:android_share)。下面是微信的二维码,为你提供及时高质的Android干货。技术交流QQ群:318588906,欢迎大家加群,共同探讨下Android和Java技术,一起壮大我们的微信干货分享社区。

Android App补丁更新的更多相关文章

  1. android app内部更新适配到8.0

    app 内部跟新是app中必须要有的功能,在app出现改变时,app内部更新能以最快的速度将应用提升到最新版本. 步骤: 1.获取本地app的版本号 int versionCode = 0; try ...

  2. Android App自动更新解决方案(DownloadManager)

    一开始,我们先向服务器请求数据获取版本 public ObservableField<VersionBean> appVersion = new ObservableField<&g ...

  3. Android(2)—Mono For Android App版本自动更新

    0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...

  4. [FMX] Android APP 启动黑屏优化补丁

    使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...

  5. Android App版本自动更新

    App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...

  6. Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新

    登陆时splash初始页调用接口检查app版本.如有更新,使用okGo的文件下载,保存到指定位置,调用Android安装apk. <!-- Android 8.0 (Android O)为了针对 ...

  7. Android学习系列(3)--App自动更新之自定义进度视图和内部存储

    友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...

  8. Android 热补丁和热修复

    参考: 各大热补丁方案分析和比较 Android App 线上热修复方案 1. Xposed Github地址:https://github.com/rovo89/Xposed 项目描述:Xposed ...

  9. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

随机推荐

  1. 【深搜+set使用学习】POJ3050-Hopscotch

    [题目大意] 给出一个5*5的方格,求出从任意一点出发走6步组成的不同序列数. [思路] dfs的水题,当作set使用方法的初次学习.每次从任意一点出发进行一次dfs,将序列加入set,最后输出set ...

  2. 20162312 2016-2017-2《Java程序设计》课程总结

    一.每周作业链接汇总 预备作业01 写的是有关老师和学生的关系: 预备作业02 如何做中学: 预备作业03 实验楼学习linux环境: 第一周作业 java入门,虚拟机等课前准备: 第二周作业 掌握J ...

  3. Mac下的MySQL修改默认连接字符集

    进入命令行执行以下命令: sudo vim /etc/my.cnf [client] default-character-set=utf8 [mysqld] character-set-server= ...

  4. DELPHI开发LINUX桌面程序

    DELPHI开发LINUX桌面程序 DELPHI官方目前为止尚不能开发LINUX桌面程序. 但三方控件FmxLinux(商业控件)是可以的.网上有破解版本.

  5. Hibernate3的jar包

    一.hibernate3包说明 说明: Hibernate 软件包中的Hibernate3.jar 是我们需要使用的Hibernate 工具,其他引用的 Jar 文件位于lib 子目录下,Hibern ...

  6. iOS:UIView的CALayer基本演练

    UIView的CALayer基本演练的属性和注意事项: 在UIView中创建一个按钮UIButton,然后设置UIButton的Layer属性 –圆角.边框.阴影及3D形变属性 注意: 1.在UIVi ...

  7. flask restful修改头部信息

    有两种方式,第一种是使用make_response from flask import make_response def test(): resp = make_response('test', c ...

  8. centos7 keepalived以及防火墙配置

    安装和配置keepalived,网上有很多资料,但是都没有提到防火墙这块,而且很多都是互相抄袭的,就算配置对了也会遇到很多问题 在查阅资料的时候配置好了keepalived,但是出现了裂脑,即两台服务 ...

  9. http://blog.csdn.net/a9529lty/article/details/6454145

    http://blog.csdn.net/a9529lty/article/details/6454145

  10. 转:Android 签名验证机制(相当不错,强烈推荐)

    转:  http://riusksk.blogbus.com/logs/272154406.html Android应用签名验证过程中,满足以下条件才能安装应用: 1.SHA-1(除META-INF目 ...