Android差分升级原理和实现方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android差分升级原理和实现方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1416字,纯文字阅读大概需要3分钟。
内容图文
![Android差分升级原理和实现方式](/upload/InfoBanner/zyjiaocheng/1087/78b478ade87840dbbbb51dcb25a16497.jpg)
增量升级概述
增量升级的原理很简单,即首先将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,例如旧版本的APK有20M,新版的有21M,更新的部分则可能只有1M左右,这里需要说明的是,得到的差分包大小并不是简单的相减,因为需要包含一些上下文相关的东西,使用差分升级的好处显而易见,那么你不需要下载完整的21M文件,只需要下载更新部分就可以,而更新部分的差分包很小,可以很大程度上减少流量的损失。
Apk增量升级过程
1、 在服务器上生成一个patch。
2、 下载patch到手机中。
3、 通过补丁获取一个已安装应用的新的安装apk。
4、 安装应用的新版本并删掉旧的版本和patch。
如何生成差分包
通常使用bsdiff来制作差分包。
bsdiff oldfile newfile patchfile差分包通常在服务器端生成,然后下发到客户端。
源代码是C语言实现的。
可以通过jni在java代码中调用C代码,生成差分包
bsdiff
如何合成新的升级包
bspatch的命令格式为:
bspatch oldfile newfile patchfile
android在data/app目录下会有原APK的备份,用原apk的备份和服务器的patch包可以合成新的apk。但是要注意版本控制,patch包一定是最终要合成的apk与原apk的差分包。原来的版本不同,升级后的版本不同,使用的差分包肯定也不是一个。
代码实现
github上有个很好的开源项目,smartAppUpdate已经对bsdiff和bspatch做了很好的封装,可以直接使用。
bsdiff的改进
google chrome项目中对bsdiff进行了改进
代码实现地址:
https://chromium.googlesource.com/chromium/src/courgette/+/master
数据对比
Here are the sizes in bytes for the recent 190.1->190.4 update on the developer channel: Full update 10,385,920 bsdiff update 704,512 Courgette update 78,848
增量升级的不足
增量升级并非完美无缺的升级方式,至少存在以下两点不足:
1.增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。
2.增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好在补丁合成前对旧版本的apk进行sha1sum校验,保证基础包的一致性。
原文:http://blog.csdn.net/robertcpp/article/details/51730021
内容总结
以上是互联网集市为您收集整理的Android差分升级原理和实现方式全部内容,希望文章能够帮你解决Android差分升级原理和实现方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。