Android APP增量更新
最近项目推进app的增量更新方案,特意看了几篇文章,先来两个博客地址
http://my.oschina.net/liucundong/blog/160436
https://github.com/cundong/SmartAppUpdates
主要是通过使用bsdiff和bspatch,实现Android应用的增量更新
. 增量更新的原理非常简单,就是将手机上已安装apk与服务器端最新apk进行二进制对比,并得到差分包,用户更新程序时,只需要下载差分包,并在本地使用差分包与已安装apk,合成新版apk。
例如,当前手机中已安装微博V1,大小为12.8MB,现在微博发布了最新版V2,大小为15.4MB,我们对两个版本的apk文件查分比对之后,发现差异只有3M,那么用户就只需要要下载一个3M的差分包,使用旧版apk与这个差分包,合成得到一个新版本apk,提醒用户安装即可,不需要整包下载15.4M的微博V2版apk。
接下来,我们分开说,需要做3件事。
1.在服务器端,生成这两个版本微博的差分包;
2.在手机客户端,使用已安装的旧版apk与这个差分包,合成为一个新版微博apk;
3.校验新合成的微博客户端文件是否完成,
过程分析
1 生成差分包
这一步需要在服务器端来实现,一般来说,每当apk有新版本需要提示用户升级,都需要运营人员在后台管理端上传新apk,上传时就应该由程序生成之前所有旧版本们与最新版的差分包。
例如: 你的apk已经发布了3个版,V1.0、V2.0、V3.0,这时候你要在后台发布V4.0,那么,当你在服务器上传最新的V4.0包时,服务器端就应该立即生成以下差分包:
V1.0 ——> V4.0的差分包;
V2.0 ——> V4.0的差分包;
V3.0 ——> V4.0的差分包;
ApkPatchLibraryServer工程即为Java语言实现的服务器端查分程序。
我们直接通过bsdiff工具完成【实际开发中由服务端生成差分包】
2.使用旧版apk与差分包,在客户端合成新apk
需要在手机客户端实现,ApkPatchLibrary工程封装了这个过程。
2.1 C部分
ApkPatchLibrary/jni/bzip2目录中所有文件都来自bzip2项目。
ApkPatchLibrary/jni/com_cundong_utils_PatchUtils.c、ApkPatchLibrary/jni/com_cundong_utils_PatchUtils.c实现文件的合并过程,其中com_cundong_utils_PatchUtils.c修改自bsdiff/bspatch.c。
我们需要用NDK编译出一个libApkPatchLibrary.so文件,生成的so文件位于libs/armeabi/ 下,其他 Android 工程便可以使用该libApkPatchLibrary.so文件来合成apk。
2.2 Java部分
com.cundong.utils包,为调用C语言的Java实现;
调用,com.cundong.utils.PatchUtils中patch()方法,可以通过旧apk与差分包,合成为新apk。
/*** 类说明: APK Patch工具类* * @author Cundong* @date 2013-9-6* @version 1.0*/
public class PatchUtils {/*** native方法* 使用路径为oldApkPath的apk与路径为patchPath的补丁包,合成新的apk,并存储于newApkPath* @param oldApkPath* @param newApkPath* @param patchPath* @return*/public static native int patch(String oldApkPath, String newApkPath,String patchPath);
}
3.校验新合成的apk文件
新包和成之后,还需要对客户端合成的apk包与最新版本apk包进行MD5或SHA1校验,如果校验码不一致,说明合成过程有问题,新合成的包将不能被安装。
注意事项
增量更新的前提条件,是在手机客户端能让我们读取到当前应用程序安装后的源apk,如果获取不到源apk,那么就无法进行增量更新了。
另外,如果你的应用程序不是很大,比如只有2、3M,那么完全没有必要使用增量更新,增量更新适用于apk包比较大的情况,比如游戏客户端。
一些说明
源码中,包含以下文件:
1.ApkPatchLibraryServer:Java语言实现的,服务器端生成差分包工程;
2.ApkPatchLibrary:客户端使用的apk合成库;
3.ApkPatchLibraryDemo:引用ApkPatchLibrary Library 的Demo,以新浪微博客户端的升级为例,假设手机上安装的是V4.5.0,最新版是V4.5.5,用户需要从V4.5.0升级到V4.5.5。
4.TestApk:用于测试的,旧版本的微博客户端,以及使用ApkPatchLibraryServer生成的新旧新浪微博差分包;
我把我使用到的工具和操作的DEMO传了上来可以看看
http://download.csdn.net/detail/yaya_soft/9374375
Android APP增量更新相关推荐
- Android APP 增量更新demo
随着现在手机硬件不断的提升,分辨率提高手机的安装包也是越来越大了.当年NOKIA,MOTO时代,一个手机APP如果有1MB那都是算大的,2MB已经不得了了.虽然网络.存储都已经大大提升,但是流量还不至 ...
- Android简单使用app增量更新
不讲原理,快速上手实现app增量更新 本文只是app端 手动实现新旧apk的差分包.注(apk的大版本不变,改变的只是资源版本号) 1,主模块,先引入下面cpp,配置文件(下面有资源 无需积分) 报错 ...
- Android的增量更新
Android的增量更新 随着现在移动端的不断普及,移动端逻辑越来越复杂,对移动端APP的要求也越来越高,所以对于一个没有用户的量APP,最重要的是用户.而一个对于一个有用户量的APP来说,最重要的是 ...
- 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端客户端
Incremental-update-master 项目地址: ccj659/Incremental-update-master 简介:采用 bsdiff 开源库 Android 的增量更新,差分更新 ...
- Android App自动更新解决方案(DownloadManager)
Android App自动更新解决方案(DownloadManager) 参考文章: (1)Android App自动更新解决方案(DownloadManager) (2)https://www.cn ...
- android通知栏应用程序更新,Android App自动更新之通知栏下载
本文实例为大家分享了Android App自动更新通知栏下载的具体代码,供大家参考,具体内容如下 版本更新说明 这里有调用UpdateService启动服务检查下载安装包等 1. 文件下载,下完后写入 ...
- android app实现更新功能
功能演示 Android App自动更新基本上是每个App都需具备的功能.网上有各种更新方式,但基本都是往年的了,最近刚查资料写完一个app更新功能,发现了许多app更新的博客内没有详细说明的小问题, ...
- Android APP 自动更新实现(适用Android9.0)
Android App自动更新基本上是每个App都需具备的功能,参考网上各种资料,自己整理了下,先来看看大致的界面: 一.实现思路: 1.发布Android App时,都会生成output-metad ...
- android app 自动更新,AndroidUpdateDemo
Android课程-App更新策略 @(Android) 第一节 课程介绍 概述 App更新是应用当中很常见的一个功能,基本上联网的app都应该具备这样的功能,对于更新迭代比较快速的产品,应用更新升级 ...
最新文章
- 信道仿真java_Matlab 瑞利信道仿真
- 如何遍历numpy数组?
- python 生成器推导式
- 阿里巴巴云原生混部系统 Koordinator 正式开源
- 2018年最值得关注的15大技术趋势
- php和mysql实现图书管理系统_0074 实现图书管理系统的登录、员工和菜单功能
- 别太相信自己,总有一种诈骗戳中你的刚需
- 反应测试_SUPERCRC 微反应量热仪DARC差分加速量热仪 PT-DSC压力跟踪差示扫描量热仪...
- 老男孩python作业_老男孩python学习之作业一购物小程序
- @click.prevent.native作用
- 服务器获取请求ip地址
- kubelet liveness probe源码简析
- MySQLzip格式安装包
- 239期夏天计算机开机号,福彩3D16239期便民工作室提供中国福彩中心开机号239期开机号...
- SAP CRM培训Uwinpro
- [ Java面试题 ]Java 开发岗面试知识点解析
- LoRa节点开发:5、代码详解LoRaWAN中的几种数据包(发送与接收数据)
- Android 集成科大讯飞语音听写功能
- 2022(秋)工程伦理答案 第一章
- Java计算抛物线轨迹
热门文章
- 连载:中国最早的一代官派留学生--留美幼童 (11)
- 20 MHz动态频谱共享的组网性能分析与验证
- python画玫瑰花带名字_Python 画一朵玫瑰给你
- [转]腾讯QQ前总经理创业,踩中直播答题、线上娃娃机风口获IDG投资
- 【全栈开发】精通 MEAN: MEAN 堆栈
- 星座时代:一家企业的自白
- 学习C++,做动态曲线,可以左右移动
- 百科知识 内六角扳手尺寸
- [230528] 托福阅读真题|TPO66|整卷得分22/30|9:45~10:45|15:40~16:40|6月1日14:30~15:20
- 基于简单字符设备驱动框架编写代码驱动io_2