APP增量更新

Posted _yegong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
    }

 

以上是关于APP增量更新的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Android Apk增量更新

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

KETTLE如何实现实时的增量更新

转Android开发之增量更新