Android-App增量更新的使用姿勢
簡述
增量更新,根據字面理解,就是下載增加的那部分來達到更新的目的,實際就是這個意思。
原理
用一箇舊的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;
實際開發流程
- 把新的Apk安裝包上傳到伺服器,讓伺服器生成對應不同版本的差異檔案。
- 伺服器需要提供一個介面,把你當前app的版本資訊通過介面傳遞到伺服器,伺服器解析判斷,完後響應資料告訴客戶端是否需要下載差異檔案,因為不同的版本下載的差異檔案不同,此處需大家多多注意。
- 如果介面返回的資料告訴客戶端有差異檔案下載,客戶端使用子執行緒下載,然後執行增量更新的合併介面,然後生成新的Apk安裝包,執行安裝命令即完成增量更新的整個過程。
效果
先把app_1.1.apk版本的安裝包安裝到手機,這個包相當於你已經發布的線上的版本1.1。
然後把差異檔案放到sdcard中(方便測試才直接放入sdcard)
然後點選PATCH按鈕,合併完成後會跳轉到安裝介面
確定安裝,安裝完成,點選進入應用
到此,Android-增量更新的使用和效果展示已完畢,有疑問可以直接留言。
轉載請註明出處,CSDN部落格:[http://blog.csdn.net/qxs965266509]
檢查合成的Apk是否完整
目前,我想到2種方式來校驗使用差異檔案合併好的新的Apk檔案是否完成的方法:
- 獲取舊的Apk安裝包的簽名和已合併成新的Apk安裝包的簽名,對比簽名是否一致
- 當你下載差異檔案時,可以讓伺服器給你返回新的Apk合併成功後文件的md5,當你合併成功後,通過校驗檔案的md5值,達到校驗檔案完整性。
不足之處
假設,當你的app已經發布了1.1、2.1、3.1等等版本的時候,現在你有要更新版本到4.1,當然增量更新可以幫你做到,但是存在不足之處。
你需要把新的4.1的app安裝包上傳到伺服器,伺服器需和已釋出的所有版本比較,產生布同那個版本的差異檔案,當然如果有的版本不再維護可以不生成。
有疑問,左上方進群討論.