Android App 增量更新实例

上传人:飞*** 文档编号:42398481 上传时间:2018-06-01 格式:DOCX 页数:9 大小:30.42KB
返回 下载 相关 举报
Android App 增量更新实例_第1页
第1页 / 共9页
Android App 增量更新实例_第2页
第2页 / 共9页
Android App 增量更新实例_第3页
第3页 / 共9页
Android App 增量更新实例_第4页
第4页 / 共9页
Android App 增量更新实例_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《Android App 增量更新实例》由会员分享,可在线阅读,更多相关《Android App 增量更新实例(9页珍藏版)》请在金锄头文库上搜索。

1、Android App 增量更新实例(2014-10-11 18:40:58) 转 载标签: it出自:http:/ 使用 bsdiff 和 bspatch,实现 Android 应用的增量更新Android 增量更新 ndk jni java目录-Android 应用增量更新库(Smart App Updates)介绍原理过程分析1 生成差分包1.1 C 部分1.2 Java 部分2.使用旧版 apk 与差分包,在客户端合成新 apk2.1 C 部分2.2 Java 部分3.校验新合成的 apk 文件注意事项GitHub 地址一些说明关于我UpdateLicenseAndroid 应用增量更

2、新库(Smart App Updates)介绍你所看到的,是一个用于 Android 应用程序增量更新的开源库。包括客户端、服务端两部分代码。原理自从 Android 4.1 开始,Google 引入了应用程序的增量更新。Link: http:/ app updates is a new feature of Google Play that introduces a better way of delivering app updates to devices. When developers publish an update, Google Play now delivers only

3、the bits that have changed to devices, rather than the entire APK. This makes the updates much lighter-weight in most cases, so they are faster to download, save the devices battery, and conserve bandwidth usage on users mobile data plan. On average, a smart app update is about 1/3 the sizeof a full

4、 APK update.增量更新的原理非常简单,就是将手机上已安装 apk 与服务器端最新 apk 进行二进制对比,并得到差分包,用户更新程序时,只需要下载差分包,并在本地使用差分包与已安装 apk,合成新版 apk。例 如,当前手机中已安装微博 V1,大小为 12.8MB,现在微博发布了最新版V2,大小为 15.4MB,我们对两个版本的 apk 文件查分比对之后,发现差异 只有 3M,那么用户就只需要要下载一个 3M 的差分包,使用旧版 apk 与这个差分包,合成得到一个新版本 apk,提醒用户安装即可,不需要整包下载 15.4M的微博 V2 版 apk。apk 文件的差分、合成,可以通过开

5、源的二进制比较工具 bsdiff 来实现(Link:http:/ bsdiff 依赖 bzip2,所以我们还需要用到bzip2(Link:http:/www.bzip.org/downloads.html)bsdiff 中,bsdiff.c 用于生成查分包,bspatch.c 用于合成文件。接下来,我们分开说,需要做 3 件事。1.在服务器端,生成这两个版本微博的差分包;2.在手机客户端,使用已安装的旧版 apk 与这个差分包,合成为一个新版微博apk;3.校验新合成的微博客户端文件是否完成,签名时候和已安装客户端一致,如一致,提示用户安装;过程分析1 生成差分包这一步需要在服务器端来实现,一

6、般来说,每当 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 语言实现的服务器端查分程序。下面对 ApkPatchLibraryServer 做一些简单说明:1.1

7、 C 部分ApkPatchLibraryServer/jni 中,除了以下 4 个:com_cundong_utils_DiffUtils.c com_cundong_utils_DiffUtils.h com_cundong_utils_PatchUtils.c com_cundong_utils_PatchUtils.h全部来自 bzip。com_cundong_utils_DiffUtils.c com_cundong_utils_DiffUtils.h用于生成差分包。com_cundong_utils_PatchUtils.c com_cundong_utils_PatchUtils.

8、h用于合成新 apk 文件。其中,com_cundong_utils_DiffUtils.c 修改自 bsdiff/bsdiff.c,com_cundong_utils_PatchUtils.c 修改自 bsdiff/bspatch.c。我 们在需要将 jni 中的 C 文件,build 输出为动态链接库,以供 Java 调用(Window 环境下生成的文件名为 libApkPatchLibraryServer.dll,Unix-like 系统下为 libApkPatchLibraryServer.so,OSX 下为libApkPatchLibraryServer.dylib)。Build 成

9、功后,将该动态链接库文件,加入环境变量,供 Java 语言调用。1.2 Java 部分com.cundong.utils 包,为调用 C 语言的 Java 实现; com.cundong.apkdiff 包,为 apk 查分程序的 Demo; com.cundong.apkpatch 包,为 apk 合并程序的Demo;调用,com.cundong.utils.DiffUtils 中 genDiff()方法,可以通过传入的新旧 apk路径,得到差分包。?12345678910111213141516171819public class DiffUtils public static nativ

10、e int genDiff(String oldApkPath, String newApkPath, String patchPath); 调用,com.cundong.utils.PatchUtils 中 patch()方法,可以通过旧 apk 与差分包,合成为新 apk。public class PatchUtils public static native int patch(String oldApkPath, String newApkPath, String patchPath); 2.使用旧版 apk 与差分包,在客户端合成新 apk需要在手机客户端实现,ApkPatchLib

11、rary 工程封装了这个过程。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/armea

12、bi/ 下,其他 Android 工程便可以使用该 libApkPatchLibrary.so 文件来合成 apk。2.2 Java 部分com.cundong.utils 包,为调用 C 语言的 Java 实现;调用,com.cundong.utils.PatchUtils 中 patch()方法,可以通过旧 apk 与差分包,合成为新 apk。public class PatchUtils public static native int patch(String oldApkPath, String newApkPath, String patchPath); 3.校验新合成的 apk

13、文件新包和成之后,还需要对客户端合成的 apk 包与最新版本 apk 包进行 MD5 或SHA1 校验,如果校验码不一致,说明合成过程有问题,新合成的包将不能被安装。注意事项增量更新的前提条件,是在手机客户端能让我们读取到当前应用程序安装后的源 apk,如果获取不到源 apk,那么就无法进行增量更新了。另外,如果你的应用程序不是很大,比如只有 2、3M,那么完全没有必要使用增量更新,增量更新适用于 apk 包比较大的情况,比如游戏客户端。GitHub 地址GitHub:https:/ 语言实现的,服务器端生成差分包工程;2.ApkPatchLibrary:客户端使用的 apk 合成库;3.Ap

14、kPatchLibraryDemo:引用 ApkPatchLibrary Library 的 Demo,以新浪微博客户端的升级为例,假设手机上安装的是 V4.5.0,最新版是 V4.5.5,用户需要从 V4.5.0 升级到 V4.5.5。4.TestApk:用于测试的,旧版本的微博客户端,以及使用 ApkPatchLibraryServer 生成的新旧新浪微博差分包;关于我Blog: http:/ cundong.liu#Update1.目前的做法只是提供了一个例子,并没有做成开源库,打算这几天改进一下,做成一个开源库,push 到 GitHub 上,开发 ing.(2014 年,8 月 31

15、 日)2.已经大幅度重构原代码,并将原来的 Demo 程序提取成为开源库,欢迎所有人 Watch、Star、Fork。(2014 年,9 月 2 日)3.修改 ReadMe.md,更加清晰的说明开源库的使用,同时进一步重构代码。(2014 年,10 月 4 日晚)LicenseCopyright 2014 Cundong Licensed under the Apache License, Version 2.0 (the “License“); you may not use this file except in compliance with the License. You may obtain a copy of the License at http:/www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号