Android的增量更新
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的增量更新相关推荐
- 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端客户端
Incremental-update-master 项目地址: ccj659/Incremental-update-master 简介:采用 bsdiff 开源库 Android 的增量更新,差分更新 ...
- Android Apk增量更新
前言 有关APK更新的技术比较多,例如:增量更新.插件式开发.热修复.RN.静默安装. 下面简单介绍一下: 什么是增量更新? 增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样. 与 ...
- linux android sdk gengxinman,Android 实现增量更新
一.概述 增量更新相较于全量更新的好处不言而喻,利用差分算法获得1.0版本到2.0版本的差分包,这样在安装了1.0的设备上只要下载这个差分包就能够完成由1.0-2.0的更新.比如: 存在一个1.0版本 ...
- Android之增量更新详解
前言:自从 Android 4.1 开始, Google Play 引入了应用程序的增量更新功能,App使用该升级方式,可节省约2/3的流量.现在国内主流的应用市场也都支持应用的增量更新了,最常见的应 ...
- android 客户端增量更新
首先我们需要了解什么是增量更新,增量更新通俗点说就是客户端只需要下载新版本与旧版本的差分包,客户端再把差分包与旧版本进行合成得到一个新apk,在安装这个新的apk,这个新的apk其实新版本,实现更新, ...
- 【Android-功能】Android应用增量更新
很久没有更新博客了,真是堕落啊,几次想提起笔,却总是被各种琐事耽搁,以后会多写文章记录点滴. 背景 随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,googl ...
- Android APP 增量更新demo
随着现在手机硬件不断的提升,分辨率提高手机的安装包也是越来越大了.当年NOKIA,MOTO时代,一个手机APP如果有1MB那都是算大的,2MB已经不得了了.虽然网络.存储都已经大大提升,但是流量还不至 ...
- Android 如何实现增量更新
什么是增量更新? 现在的APP安装包体积越来越大,几百兆甚至上G的,当APP更新时不再是消耗大量的流量下载一个完整安装包,而是消耗相对很少的流量下载一个增量包(差分包),采用谷歌Smart App U ...
- android cpp做成so库,Android增量更新(二)—制作合成文件so库
###前言 在上节中,我们已经学习了`Android增量更新`的实现原理,那么在Android开发的移动端,我们需要涉及到的其实是`文件合成`的这个流程. 那么,今天就来讲讲增量更新合成流程的实现吧. ...
最新文章
- UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)
- python获取时间周数_【手把手教你】Python量化策略风险指标
- sql server 2008学习5 sql基础
- Flink+Hologres亿级用户实时UV精确去重最佳实践
- 用计算机怎么弹离人愁数字,拇指琴新手入门曲谱——离人愁
- NOIP模拟测试21「折纸·不等式」
- vs 2015 C 语言,VS2015中C/C++代码分析
- gitglone 指定分支_安装说明 · harryxu/gitube Wiki · GitHub
- 触摸传感器的电路图符号_如何看懂汽车电路常用图形符号,看完这篇文章就懂了...
- 马尔科夫决策过程(MDP) : BlackJack (MC-On Policy)
- c语言图书馆管理系统源码,C语言图书馆管理系统源代码
- js递归遍历json对象,js循环遍历json数组
- JAVA HTML 转 PDF
- win7系统打开打印机服务器,Win7如何开启打印机服务?
- php 双引号 转义字符,php中的单引号、双引号和转义字符
- 幻方加密代码——自动生成幻方密钥方法,罗伯法单偶数阶的解法代码基于python
- UltraEdit注册机使用教程
- 深入 WEP和 WPA密码原理 1
- 股票 价格 定价 资料收集
- PPT、Word文档、Excel表格 免费模板资源
热门文章
- 简单方便的图片处理,让你颠倒的图片恢复正常
- 用户画像之概念知识!
- 使用微软的语音识别引擎Microsoft Speech API进行语音控制
- python logger handler_Python中的logger和handler到底是个什么鬼
- push()与pop()的使用
- aistudio解压zip
- conda搜索安装包时显示没有匹配No match found for: fastaqc. Search: *fastaqc* PackagesNotFoundError:
- 微信公众号授权及关注
- 蓝桥杯水题 单词分析【第十一届】【省赛】【C组】C/C++
- PyTorch-5 自定义 Datasets, DataLoaders 和 Transforms