Android-App增量更新的使用姿势

 更新时间:2016年04月26日 09:42:18   作者:_cpan  
增量更新根据字面理解就是下载增加的那部分来达到更新的目获取旧的Apk安装包的签名和已合并成新的Apk安装包的签名,对比签名是否一致当你下载差异文件时,可以让服务器给你返回新的Apk合并成功后文件的md5,当你合并成功后,通过校验文件的md5值,达到校验文件完整性。

简述

增量更新,根据字面理解,就是下载增加的那部分来达到更新的目的,实际就是这个意思。

原理

用一个旧的Apk安装与一个新的Apk安装包使用 bsdiff工具 ,执行命令生成一个差异文件,此差异文件就是我们修改需要更新下载的那部分。

引入代码及so文件

首先,根据你的系统的架构选择不同的so文件放到你的工程中

接着,需要把加载so文件的Java类引入到你的工程中,引入时,需注意,不能修改这个类的包名。

到此,增量更新引入完成。

使用

下载bsdiff工具,然后执行命令:bsdiff,会显示出命令提示

然后,执行正确的命令,结果如下:

命令:bsdiff app_1.1.apk app_1.2.apk patch.patch
参数:
app_1.1:已发布的旧版本
app_1.2:未发布的新版本
patch.patch:生成的差异文件

这里写图片描述

此补丁文件可以放到服务器供版本为1.1的用户下载并增量更新升级。

客户端增量更新接口:

public native static int bspatch(String oldApkPath,          
String newApkPath, String patchPath);          
//oldApkPath:当前Apk的存放目录          
//newApkPath:生成新的Apk要存放目录          
//patchPath:差异文件所在目录

温馨提示:记得添加网络及文件读写权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
 <uses-permission android:name="android.permission.INTERNET" />

获取当前应用的Apk的存放目录代码:

context.getApplicationInfo().sourceDir;

实际开发流程把新的Apk安装包上传到服务器,让服务器生成对应不同版本的差异文件。服务器需要提供一个接口,把你当前app的版本信息通过接口传递到服务器,服务器解析判断,完后响应数据告诉客户端是否需要下载差异文件,因为不同的版本下载的差异文件不同,此处需大家多多注意。如果接口返回的数据告诉客户端有差异文件下载,客户端使用子线程下载,然后执行增量更新的合并接口,然后生成新的Apk安装包,执行安装命令即完成增量更新的整个过程。

效果

先把app_1.1.apk版本的安装包安装到手机,这个包相当于你已经发布的线上的版本1.1。
这里写图片描述

然后把差异文件放到sdcard中(方便测试才直接放入sdcard)
这里写图片描述

然后点击PATCH按钮,合并完成后会跳转到安装界面
这里写图片描述

确定安装,安装完成,点击进入应用
这里写图片描述

到此,Android-增量更新的使用和效果展示已完毕,有疑问可以直接留言。

检查合成的Apk是否完整

目前,我想到2种方式来校验使用差异文件合并好的新的Apk文件是否完成的方法:

获取旧的Apk安装包的签名和已合并成新的Apk安装包的签名,对比签名是否一致当你下载差异文件时,可以让服务器给你返回新的Apk合并成功后文件的md5,当你合并成功后,通过校验文件的md5值,达到校验文件完整性。

不足之处假设,当你的app已经发布了1.1、2.1、3.1等等版本的时候,现在你有要更新版本到4.1,当然增量更新可以帮你做到,但是存在不足之处。

你需要把新的4.1的app安装包上传到服务器,服务器需和已发布的所有版本比较,产生布同那个版本的差异文件,当然如果有的版本不再维护可以不生成。

相关文章

  • Android中利用zxing实现自己的二维码扫描识别详解

    Android中利用zxing实现自己的二维码扫描识别详解

    这篇文章主要给大家介绍了关于Android中利用zxing实现自己的二维码扫描识别的相关资料,文中通过图文介绍的非常详细,对大家学习或者使用zxing具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-09-09
  • android异步加载图片并缓存到本地实现方法

    android异步加载图片并缓存到本地实现方法

    图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略。今天首先介绍一下本地缓存图片
    2013-01-01
  • Android Studio实现补间动画

    Android Studio实现补间动画

    这篇文章主要为大家详细介绍了Android Studio实现补间动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • android 传感器(OnSensorChanged)使用介绍

    android 传感器(OnSensorChanged)使用介绍

    当传感器的值发生变化时,例如磁阻传感器方向改变时会调用OnSensorChanged(). 当传感器的精度发生变化时会调用OnAccuracyChanged()方法
    2014-11-11
  • Android编程使用自定义shape实现shadow阴影效果的方法

    Android编程使用自定义shape实现shadow阴影效果的方法

    这篇文章主要介绍了Android编程使用自定义shape实现shadow阴影效果的方法,涉及Android中xml文件布局的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android Jetpack- Paging的使用详解

    Android Jetpack- Paging的使用详解

    这篇文章主要介绍了Android Jetpack- Paging的使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Android实现类似ios滑动按钮

    Android实现类似ios滑动按钮

    这篇文章主要为大家详细介绍了Android实现类似ios滑动按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • Android开发入门之对话框简单用法

    Android开发入门之对话框简单用法

    这篇文章主要介绍了Android对话框简单用法,涉及Android对话框的功能、定义、创建及使用等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Android放大镜的实现代码

    Android放大镜的实现代码

    这篇文章主要介绍了Android放大镜的实现代码,有需要的朋友可以参考一下
    2014-01-01
  • Android之Gallery使用例子

    Android之Gallery使用例子

    本篇文章主要介绍了Android之Gallery使用例子,Gallery用来显示图片列表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01

最新评论