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");
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM