APP增量更新

增量更新的概念:

  当我们手机上安装的app版本与服务器的最新版本不一致的时候,传统做法是重新下载安装一个最新版的apk文件,不过这种方式比较耗流量,不利于用户体验。增量更新就是只下载当前app版本与最新版本的差异内容,然后与当前版本就行合并成最新版本再安装。目前支持增量更新的应用市场 有GooglePlay、360手机市场等。

增量更新的原理:

  使用开源工具bsdiff对新版apk和旧版apk进行二进制文件比较,得到patch补丁文件,然后使用开源工具bspatch将旧版apk和补丁文件合并,重新安装。实际开发中我们app端只需要编写native方法,调用.so文件实现旧版apk与patch补丁文件的合并和安装即可,patch补丁文件是由服务器端产生的。

增量更新的代码实现:使用增量更新框架SmartAppUpdates

  

 //先加载so库
    static {
        System.loadLibrary("ApkPatchLibrary");
    }
?
    public void downloadNewApk(View view){
        //由于是个耗时操作,需要异步任务
        new AsyncTask<Void,Void,Integer>(){
            //3.合成后的新apk文件路径
            String newApkPath = Environment.getExternalStorageDirectory()+"/WeiboNew.apk";
            @Override
            protected Integer doInBackground(Void... params) {
                //1.先从服务器下载patch补丁包
                File patchFile = downloadPatchFile();
                String patchPath = patchFile.getAbsolutePath();
                //2.获取当前版本apk文件的路径
                String appPath = "/data/app/com.sina.weibo-1.apk";
                return PatchUtils.patch(appPath,newApkPath,patchPath);
            }
?
            @Override
            protected void onPostExecute(Integer integer) {
                super.onPostExecute(integer);
                if(integer==0){
                    //说明合成成功,那么开始安装
                    Toast.makeText(MainActivity.this, "合成成功!", Toast.LENGTH_SHORT).show();
                    ApkUtils.installApk(MainActivity.this,newApkPath);
                }else {
                    Toast.makeText(MainActivity.this, "合成失败!", Toast.LENGTH_SHORT).show();
                }
            }
        }.execute();
    }
?
    private File downloadPatchFile() {
        return new File(Environment.getExternalStorageDirectory(),"weibo.patch");
    }
时间: 2024-10-21 21:55:25

APP增量更新的相关文章

开源 Android App 增量更新库 版本升级

开源 Android App 增量更新库 版本升级 经过几天的重构,我将之前写的一个Android 应用增量更新的示例程序重构为了一个开源库,现在已经push 到 GitHub 上,欢迎大家Watch.Star.Fork. 包含以下内容: 服务器端生成差异包的工程:AppUpdate 客户端使用的开源apk合并库:ApkPatchLibrary 引用ApkPatchLibrary,实现增量更新的ApkPatchLibraryDemo 旧版本的微博Android客户端,以及服务端生成的新旧微博差分

基于html5plus平台 实现app增量更新功能

对于移动app,尤其是webapp,如何更新一直是比较重要的话题.以前的大部分app都是从应用商店进行版本更新,但是对于webapp来说,使用增量更新可以节省流量:更重要的是,它免去了新版本在应用商店的审核流程,使上架时间可以更加提前了. 一.前提 环境:使用html5plus作为webview与手机平台交互的中间件:关于html5plus,请自行参考 http://www.html5plus.org/#home 需求:点击"检查更新",app在线检查版本是否有更新,如果有,下载并更新

谈谈混合 App Web 资源的打包与增量更新

综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包工具.本文提到的思路只是一家之言,基本没有参考现有方案,各位方家有不同意见欢迎留言.另外本文没有涉及到 App 内部如何加载资源的问题,这部分我会专门撰写一篇文章讨论. 需求梳理 一般来说,Hybrid-app 对于 Web 资源下载有如下需求: 页面开启速度要快,所以资源的下载和使用不是在同一时间

app store 增量更新

https://developer.apple.com/library/ios/qa/qa1779/_index.html 从iOS6.x到iOS7.0支持文件级别的增量更新,即用新文件替换掉修改过的文件. 从7.1开始支持文件内容级别的增量更新,即只更新修改过的内容.但是相对的,安装时间会增加. 官方建议: To optimize the size of your app updates, you should consider two tips: Do not make unnecessar

Android 增量更新实例(Smart App Updates)

目录[-] 官方说明 实现原理 实现 (1)生成差异包 (2)使用旧apk+差异包,在客户端合成新apk 注意事项 demo 自从 Android 4.1 开始,Google引入了应用程序的增量更新. 官方说明 Smart app updates is a new feature of Google Play that introduces a better way of delivering app updates to devices. When developers publish an

移动端缓存增量更新

移动端缓存增量更新 在app的时候, 为了用户体验, 一般都会引入缓存来加速app的运行. 而缓存这东西用的好则是倚天剑, 用的不好, 容易带进脏数据. 这里来说说移动端缓存增量更新的设计思想. 以通讯录为例子. 通讯录 场景1 : app上没有任何缓存记录. 场景2 : app上存在缓存记录, 但是有一段时间没有使用改app, 不能确保缓存为最新. 场景3:  app正在使用缓存. 在上述三个场景中, 最麻烦的就是场景2, 因为可能会出现server在app不使用的时间段对通讯录中的信息进行了

iOS 6与iOS 7的增量更新的区别

从iOS 6开始,App Store就支持增量更新.增量更新只支持App Store,对企业开发者的Adhoc更新无效.增量更新对于开发者以及用户都是透明的.但我们需要理解其中的机制.iOS 6与iOS 7的机制又有所不同. iOS 6是rysnc机制,iOS 7是diff机制:后面都是我的啰嗦文字,不看也罢= = iOS 6的增量更新 对于更新app的用户,App Store会提供一个增量安装包.这个增量是文件级别的,如果两个版本中有新加入的文件则增加:有修改的文件则修改:有删除的文件就移除,

一个简单的数据增量更新策略(Android / MongoDB / Django)

我在做个人APP - CayKANJI - 的时候遇到一个问题: 怎样增量式地把日语汉字数据地从服务器更新到APP端,即每次用户执行更新操作时,只获取版本高于本地缓存的内容. 数据格式 为了能够与mongoDB无缝结合,并省去编写后台代码的麻烦,索性就把汉字数据保存成json文件,上传到服务器后,交给web应用去读取并写入数据库. 汉字文件就是普通的json格式. { "category": "行為ー2", "contents": [ { &qu

最全的增量更新入门 包含linux端和Android

简介 增量更新大量用于 Android各大应用市场.本文想做网络上从服务器到app客户端完整讲解.app用eclipse和android studio 最新版cmark开发ndk 如下图: 以前一直好奇怎么做的直到知道了bsdiff库. 地址附上: bsdiff源码地址和简介 大家可以从简介看到bsdiff是基于bzip2源码(bsdiff和bspatch一个用于生成差异文件补丁,另一个用于差异文件和旧文件合成新文件) 下载地址说明 应用市场原理说明 假设你用的是"XXX市场"点击更新