最近项目推进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包时,服务器端就应该立即生成以下差分包:

  1. V1.0 ——> V4.0的差分包;

  2. V2.0 ——> V4.0的差分包;

  3. 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增量更新相关推荐

  1. Android APP 增量更新demo

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

  2. Android简单使用app增量更新

    不讲原理,快速上手实现app增量更新 本文只是app端 手动实现新旧apk的差分包.注(apk的大版本不变,改变的只是资源版本号) 1,主模块,先引入下面cpp,配置文件(下面有资源 无需积分) 报错 ...

  3. Android的增量更新

    Android的增量更新 随着现在移动端的不断普及,移动端逻辑越来越复杂,对移动端APP的要求也越来越高,所以对于一个没有用户的量APP,最重要的是用户.而一个对于一个有用户量的APP来说,最重要的是 ...

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

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

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

    Android App自动更新解决方案(DownloadManager) 参考文章: (1)Android App自动更新解决方案(DownloadManager) (2)https://www.cn ...

  6. android通知栏应用程序更新,Android App自动更新之通知栏下载

    本文实例为大家分享了Android App自动更新通知栏下载的具体代码,供大家参考,具体内容如下 版本更新说明 这里有调用UpdateService启动服务检查下载安装包等 1. 文件下载,下完后写入 ...

  7. android app实现更新功能

    功能演示 Android App自动更新基本上是每个App都需具备的功能.网上有各种更新方式,但基本都是往年的了,最近刚查资料写完一个app更新功能,发现了许多app更新的博客内没有详细说明的小问题, ...

  8. Android APP 自动更新实现(适用Android9.0)

    Android App自动更新基本上是每个App都需具备的功能,参考网上各种资料,自己整理了下,先来看看大致的界面: 一.实现思路: 1.发布Android App时,都会生成output-metad ...

  9. android app 自动更新,AndroidUpdateDemo

    Android课程-App更新策略 @(Android) 第一节 课程介绍 概述 App更新是应用当中很常见的一个功能,基本上联网的app都应该具备这样的功能,对于更新迭代比较快速的产品,应用更新升级 ...

最新文章

  1. 信道仿真java_Matlab 瑞利信道仿真
  2. 如何遍历numpy数组?
  3. python 生成器推导式
  4. 阿里巴巴云原生混部系统 Koordinator 正式开源
  5. 2018年最值得关注的15大技术趋势
  6. php和mysql实现图书管理系统_0074 实现图书管理系统的登录、员工和菜单功能
  7. 别太相信自己,总有一种诈骗戳中你的刚需
  8. 反应测试_SUPERCRC 微反应量热仪DARC差分加速量热仪 PT-DSC压力跟踪差示扫描量热仪...
  9. 老男孩python作业_老男孩python学习之作业一购物小程序
  10. @click.prevent.native作用
  11. 服务器获取请求ip地址
  12. kubelet liveness probe源码简析
  13. MySQLzip格式安装包
  14. 239期夏天计算机开机号,福彩3D16239期便民工作室提供中国福彩中心开机号239期开机号...
  15. SAP CRM培训Uwinpro
  16. [ Java面试题 ]Java 开发岗面试知识点解析
  17. LoRa节点开发:5、代码详解LoRaWAN中的几种数据包(发送与接收数据)
  18. Android 集成科大讯飞语音听写功能
  19. 2022(秋)工程伦理答案 第一章
  20. Java计算抛物线轨迹

热门文章

  1. 连载:中国最早的一代官派留学生--留美幼童 (11)
  2. 20 MHz动态频谱共享的组网性能分析与验证
  3. python画玫瑰花带名字_Python 画一朵玫瑰给你
  4. [转]腾讯QQ前总经理创业,踩中直播答题、线上娃娃机风口获IDG投资
  5. 【全栈开发】精通 MEAN: MEAN 堆栈
  6. 星座时代:一家企业的自白
  7. 学习C++,做动态曲线,可以左右移动
  8. 百科知识 内六角扳手尺寸
  9. [230528] 托福阅读真题|TPO66|整卷得分22/30|9:45~10:45|15:40~16:40|6月1日14:30~15:20
  10. 基于简单字符设备驱动框架编写代码驱动io_2