Android的增量更新

随着现在移动端的不断普及,移动端逻辑越来越复杂,对移动端APP的要求也越来越高,所以对于一个没有用户的量APP,最重要的是用户。而一个对于一个有用户量的APP来说,最重要的是留住客户,那么对于这样的APP来说,用户体验是他们最关心的。

所以今天要说的就是比较流行的几个关于APP升级的问题,因为APP升级是一个比较头疼的事,一般用户不愿意进行版本升级,因为升级又耗时又费力,有可能费钱,比如说你在没有wifi的情况下。但是对于企业来说,一款APP的不断完善,需要一个过程的积累,所以为了解决这一矛盾,就需要在版本升级上下一些功夫了。

  • 什么是增量更新
  • APP升级以及更新的几种方式
  • 增量更新的优势
  • 增量更新的流程

什么是增量更新

相信大家都见过在应用市场省流量更新软件,一个几百M的软件可能只需要下载一个20M的增量包就能完成更新。那么它是如何做的呢?

APP升级以及更新的几种方式

  • 传统的APP版本更新

    从服务器下载新的安装包,进行版本更新

  • 增量更新

    形如传统APP更新,拆分出新版本和旧版本的不同之处,生成patch包,从服务器下载相应的patch包,和旧版本APP合成新版本的APP

  • 热修复

    从服务器下载相应的dex包,进行部分代码的修复

  • 插件化更新

    只能实现部分更新

增量更新的优势

使得更新包更小,下载更快、省流量,使用户更容易的接受这种方式

增量更新的流程

用户手机上安装着某个应用,下载了增量包,手机上的apk和增量包合并形成新的包,然后再次安装(注意这个过程是要重新安装的,当然部分应用市场有root权限你可能感知不到)。

  • 从用户手机上提取当前安装的APP文件
  • 通过新版本APK和旧版本APP生成一个增量包
  • 用户从服务器下载增量包
  • 增量包与当前安装APP合并,生成新版本的APP
  • 重新安装

1、从用户手机上提取当前安装的APP文件

public class ApkExtract {public static String extract(Context context) {context = context.getApplicationContext();ApplicationInfo applicationInfo = context.getApplicationInfo();String apkPath = applicationInfo.sourceDir;Log.d("hongyang", apkPath);return apkPath;}
}

2、通过新版本APK和旧版本APP生成一个增量包

生成APP增量包一般放在服务器端,因为放在服务器端需要服务器数据库进行记录,并且也更加方便

这个其实就是利用工具做二进制的一个bsdiff和bspatch了。

网址:

http://www.daemonology.net/bsdiff/
下载地址:

http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz

ok,假设到这里,不管你使用何种手段,咱们已经有了bsdiff和bspacth,下面演示下这个工具的使用:

首先我们准备两个apk,old.apk和new.apk,你可以自己随便写个项目,先运行一次拿到生成的apk作为old.apk;然后修改些代码,或者加一些功能,再运行一次生成new.apk;

  • 生成增量文件
./bsdiff old.apk new.apk old-to-new.patch
  • 增量文件和old.apk合并成新的apk
./bspatch old.apk new2.apk old-to-new.patch

这样就生成一个new2.apk

那么怎么证明这个生成的new2.apk和我们的new.apk一模一样呢?

我们可以查看下md5的值,如果两个文件md5值一致,那么几乎可以肯定两个文件时一模一样的(不要跟我较真说什么碰撞可以产生一样的md5的值~~)。

aaa:bsdiff-4.3 zhy$ md5 new.apk
MD5 (new.apk) = 0900d0d65f49a0cc3b472e14da11bde7
aaa:bsdiff-4.3 zhy$ md5 new2.apk
MD5 (new2.apk) = 0900d0d65f49a0cc3b472e14da11bde7

3、用户从服务器下载增量包

简单文件下载操作,自行百度

4、增量包与当前安装APP合并,生成新版本的APP

此时需要用到JNI,使用本地方法调用C库方法,C方法开源代码中已给出

5、重新安装

public static void install(Context context, String apkPath) {Intent i = new Intent(Intent.ACTION_VIEW);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);i.setDataAndType(Uri.fromFile(new File(apkPath)),"application/vnd.android.package-archive");context.startActivity(i);}

源码: 
https://github.com/JsonNan/AndroidPatchUpdate

写这篇文章的目的更多的是为了总结
相关文章可参考鸿洋大神

http://blog.csdn.net/lmj623565791/article/details/52761658
http://blog.csdn.net/shareus/article/details/51454807

Android的增量更新相关推荐

  1. 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端客户端

    Incremental-update-master 项目地址: ccj659/Incremental-update-master 简介:采用 bsdiff 开源库 Android 的增量更新,差分更新 ...

  2. Android Apk增量更新

    前言 有关APK更新的技术比较多,例如:增量更新.插件式开发.热修复.RN.静默安装. 下面简单介绍一下: 什么是增量更新?   增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样. 与 ...

  3. linux android sdk gengxinman,Android 实现增量更新

    一.概述 增量更新相较于全量更新的好处不言而喻,利用差分算法获得1.0版本到2.0版本的差分包,这样在安装了1.0的设备上只要下载这个差分包就能够完成由1.0-2.0的更新.比如: 存在一个1.0版本 ...

  4. Android之增量更新详解

    前言:自从 Android 4.1 开始, Google Play 引入了应用程序的增量更新功能,App使用该升级方式,可节省约2/3的流量.现在国内主流的应用市场也都支持应用的增量更新了,最常见的应 ...

  5. android 客户端增量更新

    首先我们需要了解什么是增量更新,增量更新通俗点说就是客户端只需要下载新版本与旧版本的差分包,客户端再把差分包与旧版本进行合成得到一个新apk,在安装这个新的apk,这个新的apk其实新版本,实现更新, ...

  6. 【Android-功能】Android应用增量更新

    很久没有更新博客了,真是堕落啊,几次想提起笔,却总是被各种琐事耽搁,以后会多写文章记录点滴. 背景 随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,googl ...

  7. Android APP 增量更新demo

    随着现在手机硬件不断的提升,分辨率提高手机的安装包也是越来越大了.当年NOKIA,MOTO时代,一个手机APP如果有1MB那都是算大的,2MB已经不得了了.虽然网络.存储都已经大大提升,但是流量还不至 ...

  8. Android 如何实现增量更新

    什么是增量更新? 现在的APP安装包体积越来越大,几百兆甚至上G的,当APP更新时不再是消耗大量的流量下载一个完整安装包,而是消耗相对很少的流量下载一个增量包(差分包),采用谷歌Smart App U ...

  9. android cpp做成so库,Android增量更新(二)—制作合成文件so库

    ###前言 在上节中,我们已经学习了`Android增量更新`的实现原理,那么在Android开发的移动端,我们需要涉及到的其实是`文件合成`的这个流程. 那么,今天就来讲讲增量更新合成流程的实现吧. ...

最新文章

  1. UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)
  2. python获取时间周数_【手把手教你】Python量化策略风险指标
  3. sql server 2008学习5 sql基础
  4. Flink+Hologres亿级用户实时UV精确去重最佳实践
  5. 用计算机怎么弹离人愁数字,拇指琴新手入门曲谱——离人愁
  6. NOIP模拟测试21「折纸·不等式」
  7. vs 2015 C 语言,VS2015中C/C++代码分析
  8. gitglone 指定分支_安装说明 · harryxu/gitube Wiki · GitHub
  9. 触摸传感器的电路图符号_如何看懂汽车电路常用图形符号,看完这篇文章就懂了...
  10. 马尔科夫决策过程(MDP) : BlackJack (MC-On Policy)
  11. c语言图书馆管理系统源码,C语言图书馆管理系统源代码
  12. js递归遍历json对象,js循环遍历json数组
  13. JAVA HTML 转 PDF
  14. win7系统打开打印机服务器,Win7如何开启打印机服务?
  15. php 双引号 转义字符,php中的单引号、双引号和转义字符
  16. 幻方加密代码——自动生成幻方密钥方法,罗伯法单偶数阶的解法代码基于python
  17. UltraEdit注册机使用教程
  18. 深入 WEP和 WPA密码原理 1
  19. 股票 价格 定价 资料收集
  20. PPT、Word文档、Excel表格 免费模板资源

热门文章

  1. 简单方便的图片处理,让你颠倒的图片恢复正常
  2. 用户画像之概念知识!
  3. 使用微软的语音识别引擎Microsoft Speech API进行语音控制
  4. python logger handler_Python中的logger和handler到底是个什么鬼
  5. push()与pop()的使用
  6. aistudio解压zip
  7. conda搜索安装包时显示没有匹配No match found for: fastaqc. Search: *fastaqc* PackagesNotFoundError:
  8. 微信公众号授权及关注
  9. 蓝桥杯水题 单词分析【第十一届】【省赛】【C组】C/C++
  10. PyTorch-5 自定义 Datasets, DataLoaders 和 Transforms