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

简述

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

原理

用一个旧的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安装包上传到服务器,服务器需和已发布的所有版本比较,产生布同那个版本的差异文件,当然如果有的版本不再维护可以不生成。

(0)

相关推荐

  • Android应用App更新实例详解

    前言:现在一般的Android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新.该项目实现的就是这个功能.并且有强制更新和更新提示两种方式,当有更新时,会弹出一个提示框,点击下载,则在通知来创建一个进度条进行下载,点击取消,则取消更新. 效果: 开发环境:AndroidStudio2.1.2+gradle-2.10 部分代码: public class UpdateVersionController { private Context context;

  • android实现通知栏下载更新app示例

    1.设计思路,使用VersionCode定义为版本升级参数.android为我们定义版本提供了2个属性: 复制代码 代码如下: <manifest package="com.cnblogs.tianxia.subway"android:versionCode="1" <!--Integer类型,系统不显示给用户-->android:versionName="1.0"<!--String类型,系统显示用户-->>

  • Android应用APP自动更新功能的代码实现

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必要给我们的Android应用增加自动更新的功能. 既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息: <update> <version>2</version> <name>baidu

  • Android App增量更新详解及实例代码

    Android App增量更新实例--Smart App Updates        介绍 你所看到的,是一个用于Android应用程序增量更新的开源库. 包括客户端.服务端两部分代码. 原理 自从 Android 4.1 开始,Google引入了应用程序的增量更新. Link: http://developer.android.com/about/versions/jelly-bean.html Smart app updates is a new feature of Google Pla

  • Android如何实现APP自动更新

    先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP到各大应用市场的工作量就已经很大了,好不容易我们把APP都上传完了,突然发现一个会导致应用闪退的小Bug,这时那个崩溃啊,明明不是很大的改动,难道我们还要再去重新去把各大应用市场的版本再上传更新一次?相信我,运营人员肯定会弄死你的!! 有问题,自然就会有解决问题的方案,因此我们就会想到如果在APP里

  • Android应用强制更新APP的示例代码

    Android应用强制更新的用途十分广泛,特别上刚上线的应用肯定会存在或多或少的bug,特别是涉及移动支付这一块的内容,如果出错了会造成比较大的损失,所以强制更新显得尤为重要. 一般来说,强制更新的策略就是: 应用启动时请求后台,后台发送应用最新版本的信息(包括应用版本号.名称.更新内容说明.下载包的服务器地址.是否强制更新的标志位)等等. 下面我们就将根据以上思路来写实现代码. 1.AndroidManifest配置版本信息 在AndroidManifest.xml里定义了每个Android

  • Android App实现应用内部自动更新的最基本方法示例

    这只是初步的实现,并没有加入自动编译等功能.需要手动更改更新的xml文件和最新的apk.    共涉及到四个文件! 一.客户端 AndroidUpdateTestActivity:程序首页 main.xml:首页布局 Update:更新类 softupdate_progress:更新等待界面 Updage package majier.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce

  • 基于Retrofit2+RxJava2实现Android App自动更新

    本文实例为大家分享了Retrofit2 RxJava2实现Android App自动更新,具体内容如下 功能解析 自动更新可以说已经是App的标配了,很多第三方平台也都支持这个功能,最近手头上的项目需要加入这个App自动更新,考虑到项目里有用到Retrofit2和RxJava2,于是打算使用它俩自己实现这个功能. 分析App自动更新,可以分为以下三个功能点: 1.APK文件的下载 2.下载进度的实时更新显示 3.下载完成后的自动安装 其中比较难的一点是下载进度的实时更新显示,更难的是如何优雅的进

  • Android App自动更新之通知栏下载

    本文实例为大家分享了Android App自动更新通知栏下载的具体代码,供大家参考,具体内容如下 版本更新说明 这里有调用UpdateService启动服务检查下载安装包等 1. 文件下载,下完后写入到sdcard 2. 如何在通知栏上显示下载进度 3. 下载完毕自动安装 4. 如何判断是否有新版本 版本更新的主类 package com.wei.update; import java.io.IOException; import java.io.InputStream; import java

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

    简述 增量更新,根据字面理解,就是下载增加的那部分来达到更新的目的,实际就是这个意思. 原理 用一个旧的Apk安装与一个新的Apk安装包使用 bsdiff工具 ,执行命令生成一个差异文件,此差异文件就是我们修改需要更新下载的那部分. 引入代码及so文件 首先,根据你的系统的架构选择不同的so文件放到你的工程中 接着,需要把加载so文件的Java类引入到你的工程中,引入时,需注意,不能修改这个类的包名. 到此,增量更新引入完成. 使用 下载bsdiff工具,然后执行命令:bsdiff,会显示出命令

  • 详解Android app自动更新总结(已适配9.0)

    1.配置: 1.1 AndroidManifest.xml中添加权限和FileProvider: <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name=&quo

  • Android实现APP自动更新功能

    现在一般的android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新.该小程序实现的就是这个功能. 该小程序的特点是,当有更新时,会弹出一个提示框,点击确定,则在通知来创建一个进度条进行下载,点击取消,则取消更新. 以下是详细代码: 1.创建布局文件notification_item.xml,用于在通知栏生成一个进度条和下载图标. <?xml version="1.0" encoding="utf-8"?>

  • uni-app如何实现增量更新功能

    都知道,很多APP都有增量更新功能,Uni APP也是在今年初,推出了增量更新功能,今天我们就来学习一波. 当然,很多应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对增量更新大多持排斥态度,特别是apple.所以拥有增量更新的app,需要注意以下几点: 1.上架审核期间不要弹出增量更新提示 2.增量更新内容使用https下载,避免被三方网络劫持 3.不要更新违法内容.不要通过增量更新破坏应用市场的利益,比如iOS的虚拟支付要给Apple抽佣等 通过本章节你能学到那些? 1.如何实现

  • android中强制更新app实例代码

    推荐第三种方式,简单快捷不卡. 第一种:jjdxm_update GitHub地址:jjdxmashl/jjdxm_update 效果图: 点击立即更新,程序会在后台下载,通知栏有下载进度.这个时候手机系统很卡,可能由于是下载app的原因吧.下载完成后弹出安装界面 简介: 这是大神jjdxmashl的开源项目,下载地址见上方.有版本更新.手动更新.静默更新.自动更新4种情况.应用内更新,实现类是友盟自动更新sdk的模式,用户使用前只需要配置自己的服务器更新检查接口即可(必须接口),也可以扩展加入

随机推荐