Android-App增量更新的使用姿勢
簡述
增量更新,根據(jù)字面理解,就是下載增加的那部分來達(dá)到更新的目的,實(shí)際就是這個(gè)意思。
原理
用一個(gè)舊的Apk安裝與一個(gè)新的Apk安裝包使用 bsdiff工具 ,執(zhí)行命令生成一個(gè)差異文件,此差異文件就是我們修改需要更新下載的那部分。
引入代碼及so文件
首先,根據(jù)你的系統(tǒng)的架構(gòu)選擇不同的so文件放到你的工程中
接著,需要把加載so文件的Java類引入到你的工程中,引入時(shí),需注意,不能修改這個(gè)類的包名。
到此,增量更新引入完成。
使用
下載bsdiff工具,然后執(zhí)行命令:bsdiff,會(huì)顯示出命令提示
然后,執(zhí)行正確的命令,結(jié)果如下:
命令:bsdiff app_1.1.apk app_1.2.apk patch.patch
參數(shù):
app_1.1:已發(fā)布的舊版本
app_1.2:未發(fā)布的新版本
patch.patch:生成的差異文件
此補(bǔ)丁文件可以放到服務(wù)器供版本為1.1的用戶下載并增量更新升級(jí)。
客戶端增量更新接口:
public native static int bspatch(String oldApkPath, String newApkPath, String patchPath); //oldApkPath:當(dāng)前Apk的存放目錄 //newApkPath:生成新的Apk要存放目錄 //patchPath:差異文件所在目錄
溫馨提示:記得添加網(wǎng)絡(luò)及文件讀寫權(quán)限
<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" />
獲取當(dāng)前應(yīng)用的Apk的存放目錄代碼:
context.getApplicationInfo().sourceDir;
實(shí)際開發(fā)流程把新的Apk安裝包上傳到服務(wù)器,讓服務(wù)器生成對(duì)應(yīng)不同版本的差異文件。服務(wù)器需要提供一個(gè)接口,把你當(dāng)前app的版本信息通過接口傳遞到服務(wù)器,服務(wù)器解析判斷,完后響應(yīng)數(shù)據(jù)告訴客戶端是否需要下載差異文件,因?yàn)椴煌陌姹鞠螺d的差異文件不同,此處需大家多多注意。如果接口返回的數(shù)據(jù)告訴客戶端有差異文件下載,客戶端使用子線程下載,然后執(zhí)行增量更新的合并接口,然后生成新的Apk安裝包,執(zhí)行安裝命令即完成增量更新的整個(gè)過程。
效果
先把a(bǔ)pp_1.1.apk版本的安裝包安裝到手機(jī),這個(gè)包相當(dāng)于你已經(jīng)發(fā)布的線上的版本1.1。
然后把差異文件放到sdcard中(方便測試才直接放入sdcard)
然后點(diǎn)擊PATCH按鈕,合并完成后會(huì)跳轉(zhuǎn)到安裝界面
確定安裝,安裝完成,點(diǎn)擊進(jìn)入應(yīng)用
到此,Android-增量更新的使用和效果展示已完畢,有疑問可以直接留言。
檢查合成的Apk是否完整
目前,我想到2種方式來校驗(yàn)使用差異文件合并好的新的Apk文件是否完成的方法:
獲取舊的Apk安裝包的簽名和已合并成新的Apk安裝包的簽名,對(duì)比簽名是否一致當(dāng)你下載差異文件時(shí),可以讓服務(wù)器給你返回新的Apk合并成功后文件的md5,當(dāng)你合并成功后,通過校驗(yàn)文件的md5值,達(dá)到校驗(yàn)文件完整性。
不足之處假設(shè),當(dāng)你的app已經(jīng)發(fā)布了1.1、2.1、3.1等等版本的時(shí)候,現(xiàn)在你有要更新版本到4.1,當(dāng)然增量更新可以幫你做到,但是存在不足之處。
你需要把新的4.1的app安裝包上傳到服務(wù)器,服務(wù)器需和已發(fā)布的所有版本比較,產(chǎn)生布同那個(gè)版本的差異文件,當(dāng)然如果有的版本不再維護(hù)可以不生成。
- 基于Retrofit2+RxJava2實(shí)現(xiàn)Android App自動(dòng)更新
- android中強(qiáng)制更新app實(shí)例代碼
- Android實(shí)現(xiàn)簡潔的APP更新dialog數(shù)字進(jìn)度條
- Android應(yīng)用App更新實(shí)例詳解
- Android應(yīng)用APP自動(dòng)更新功能的代碼實(shí)現(xiàn)
- Android App增量更新詳解及實(shí)例代碼
- Android如何實(shí)現(xiàn)APP自動(dòng)更新
- Android App實(shí)現(xiàn)應(yīng)用內(nèi)部自動(dòng)更新的最基本方法示例
- android實(shí)現(xiàn)通知欄下載更新app示例
- Android實(shí)現(xiàn)APP在線下載更新
相關(guān)文章
Android亮度調(diào)節(jié)的幾種實(shí)現(xiàn)方法
本篇文章詳細(xì)介紹了Android亮度調(diào)節(jié)的幾種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11Android library native調(diào)試代碼遇到的問題解決
這篇文章主要介紹了Android library native 代碼不能調(diào)試解決方法匯總,android native開發(fā)會(huì)碰到native代碼無法調(diào)試問題,而app主工程中的native代碼是可以調(diào)試的2023-04-04發(fā)布?Android?library?到?Maven?解析
這篇文章主要介紹了發(fā)布?Android?library到Maven解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Android?hid發(fā)送apdu格式數(shù)據(jù)示例詳解
這篇文章主要介紹了Android?hid發(fā)送apdu格式數(shù)據(jù),在?Android?中,如果你想通過?HID(Human?Interface?Device)發(fā)送?APDU?格式的數(shù)據(jù),通常會(huì)涉及?USB?HID?設(shè)備或藍(lán)牙?HID?設(shè)備,本文給大家講解的非常詳細(xì),需要的朋友可以參考下2023-08-08Android消息通知Notification常用方法(發(fā)送消息和接收消息)
最近在做消息通知類Notification的相關(guān)業(yè)務(wù),利用閑暇時(shí)間總結(jié)一下,主要分為兩部分來記錄:發(fā)送消息和接收消息,對(duì)Android消息通知相關(guān)知識(shí)感興趣的朋友一起看看吧2024-02-02Android 中SP與DP的區(qū)別實(shí)例詳解
這篇文章主要介紹了Android 中SP與DP的區(qū)別實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10