1. 程式人生 > >Android-App增量更新的使用姿勢

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

http://www.qqjay.com/yijingtupian/86114.html

簡述

增量更新,根據字面理解,就是下載增加的那部分來達到更新的目的,實際就是這個意思。

原理

用一箇舊的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;

實際開發流程

  1. 把新的Apk安裝包上傳到伺服器,讓伺服器生成對應不同版本的差異檔案。
  2. 伺服器需要提供一個介面,把你當前app的版本資訊通過介面傳遞到伺服器,伺服器解析判斷,完後響應資料告訴客戶端是否需要下載差異檔案,因為不同的版本下載的差異檔案不同,此處需大家多多注意。
  3. 如果介面返回的資料告訴客戶端有差異檔案下載,客戶端使用子執行緒下載,然後執行增量更新的合併介面,然後生成新的Apk安裝包,執行安裝命令即完成增量更新的整個過程。

效果

先把app_1.1.apk版本的安裝包安裝到手機,這個包相當於你已經發布的線上的版本1.1。
這裡寫圖片描述

然後把差異檔案放到sdcard中(方便測試才直接放入sdcard)
這裡寫圖片描述

然後點選PATCH按鈕,合併完成後會跳轉到安裝介面
這裡寫圖片描述

確定安裝,安裝完成,點選進入應用
這裡寫圖片描述

到此,Android-增量更新的使用和效果展示已完畢,有疑問可以直接留言。
轉載請註明出處,CSDN部落格:[http://blog.csdn.net/qxs965266509]

檢查合成的Apk是否完整

目前,我想到2種方式來校驗使用差異檔案合併好的新的Apk檔案是否完成的方法:

  1. 獲取舊的Apk安裝包的簽名和已合併成新的Apk安裝包的簽名,對比簽名是否一致
  2. 當你下載差異檔案時,可以讓伺服器給你返回新的Apk合併成功後文件的md5,當你合併成功後,通過校驗檔案的md5值,達到校驗檔案完整性。

不足之處

假設,當你的app已經發布了1.1、2.1、3.1等等版本的時候,現在你有要更新版本到4.1,當然增量更新可以幫你做到,但是存在不足之處。

你需要把新的4.1的app安裝包上傳到伺服器,伺服器需和已釋出的所有版本比較,產生布同那個版本的差異檔案,當然如果有的版本不再維護可以不生成。

有疑問,左上方進群討論.