• 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");
        }
  • 相关阅读:
    IE浏览器cookie存放在本地什么目录
    C# clickonce 部署自定义文件
    [C#.Net]C#连接Oracle数据库的方法
    Eclipse 插件一览
    登录名 '***' 拥有一个或多个数据库。在删除该登录名之前,请更改相应数据库的所有者。 (Microsoft SQL Server,错误: 15174)
    SqlServer_表结构查询_查询当前用户所有表名
    sqlserver怎么删除有外键关联的数据?
    springboot logback控制台中文输出乱码
    控制台运行JAVA的jar文件时乱码 / Gradle编译设置编码格式
    Python 算法之一
  • 原文地址:https://www.cnblogs.com/yegong0214/p/6511519.html
Copyright © 2020-2023  润新知