日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux 二进制差分工具,打造Android万能的软件更新库

發(fā)布時(shí)間:2023/12/3 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 二进制差分工具,打造Android万能的软件更新库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今日科技快訊

阿里星球今天在蘋果商店發(fā)布的更新動(dòng)態(tài)顯示,其將在近期停止APP內(nèi)的音樂服務(wù),用戶可以通過新版本內(nèi)的指引和說明,導(dǎo)出本地音樂。這意味著上線八個(gè)月后,阿里星球做出了一個(gè)重大決定:停止音樂服務(wù)后,這款由天天動(dòng)聽改版而來、承載了阿里音樂鐵三角期望的APP,將徹底與音樂播放器功能告別。

作為宋柯、高曉松以及何炅加盟阿里音樂后準(zhǔn)備了大半年推出的平臺(tái),阿里星球承載了阿里音樂鐵三角對(duì)音樂業(yè)務(wù)的重要期望,但從結(jié)果來看并不如人意。上線之初,阿里星球便遭遇大量用戶差評(píng)。作者簡(jiǎn)介

本篇來自 hcy 的投稿,分享了他自己封裝的軟件更新工具。希望能幫助到有需要的朋友。

hcy的博客地址:http://blog.csdn.net/huang_cai_yuan

概述

軟件更新功能可以說是APP的標(biāo)配。以前實(shí)現(xiàn)這個(gè)功能的時(shí)候,自己一行一行代碼重復(fù)擼,浪費(fèi)時(shí)間。所以我決定實(shí)現(xiàn)一個(gè)萬能的可復(fù)用的更新庫(kù)。讓它支持增量更新、全量更新、靜默安裝、普通方式安裝、可以自定義UI。下面就來介紹一下我實(shí)現(xiàn)這個(gè)庫(kù)的主要技術(shù)點(diǎn):增量更新、靜默安裝及如何封裝。

軟件增量更新處理流程

服務(wù)端處理流程

1.驗(yàn)證請(qǐng)求的合法性。

2.如果請(qǐng)求不合法(比如請(qǐng)求是模擬的,非客戶端發(fā)出的),則拒絕服務(wù)。

3.如果請(qǐng)求合法,獲取versionCode等信息,根據(jù)versionCode判斷軟件是否更新。

4.如果不需要更新,則返回對(duì)應(yīng)信息。

5.如果需要更新,獲取與versionCode對(duì)應(yīng)的客戶端文件的MD5,判斷該MD5值是否在歷史版本文件的MD5列表中,如果在說明支持增量更新。

6.如果不支持增量更新,則返回完整apk文件的下載鏈接。

7.如果支持增量更新,判斷對(duì)應(yīng)的patch文件是否存在。

8.如果對(duì)應(yīng)的patch文件不存在,調(diào)用腳本程序生成對(duì)應(yīng)的patch文件,并返回該patch文件的下載鏈接。

9.如果對(duì)應(yīng)的patch文件存在,則返回該patch文件的下載鏈接。

客戶端處理流程

1.收集apk的基本信息,向服務(wù)端發(fā)送更新請(qǐng)求。

2.如果沒有更新,則做對(duì)應(yīng)的提示操作。

3.如果有更新,判斷是否是增量更新還是全量更新。

4.如果是全量更新,則下載對(duì)應(yīng)的apk文件,展示相應(yīng)的UI,安裝apk即可。

5.如果是增量更新,則下載對(duì)應(yīng)的patch文件,展示相應(yīng)的UI,然后提取客戶端的apk文件到指定目錄并與patch文件合并成一個(gè)新的apk文件,判斷新合成的apk文件是否與從服務(wù)端獲取的完整的apk文件MD5的值一致,若一致說明合成成功,安裝新合成的apk文件即可,若不一致說明合成失敗,進(jìn)行安裝失敗的提示。

增量更新的實(shí)現(xiàn)

通過上面的處理流程分析,我們發(fā)現(xiàn)實(shí)現(xiàn)增量更新的難點(diǎn)主要在于patch文件的生成、新apk文件的合成這兩個(gè)部分。這里借助開源的bsdiff來實(shí)現(xiàn)這兩部分的功能。

1.下載二進(jìn)制差分、合并工具

增量更新的實(shí)現(xiàn)用到第三方庫(kù)bsdiff

http://www.daemonology.net/bsdiff

該庫(kù)依賴:bzip2

http://www.bzip.org/downloads.html

bsdiff 目前支持Linux、Windows,同時(shí)也有Python版本的源碼。

2.服務(wù)端patch文件的生成

服務(wù)端可以根據(jù)需要,選擇對(duì)應(yīng)的版本進(jìn)行 patch文件 的生成,比如 Windows版本 的生成方式如下:

同時(shí)按住Shift+右鍵,選擇“在此處打開命令窗口”,執(zhí)行命令bsdiff old.apk new.apk patch.patch即可生成patch包,至于腳本怎么執(zhí)行這些命令,請(qǐng)讀者自行發(fā)揮。

3. 客戶端新apk的合成實(shí)現(xiàn)

點(diǎn)擊條目1中的鏈接,下載linux版本的源代碼,同時(shí)下載bzip2的源代碼,文件目錄結(jié)構(gòu)如下:

接著將bsdiff.c、bspatch.c文件中的main方法改成 diff、patch

然后編寫jni代碼,調(diào)用bsdiff和bspatch的diff、patch方法

接下來,在外層的Android.mk文件中編寫 makefile腳本(gradle里面編譯jni我不熟,哈哈哈,還是makefile用著習(xí)慣),將bsdiff、bzip2編譯成靜態(tài)庫(kù),同時(shí)引入 子目錄的Android.mk文件。

在jni_bsdiff目錄下面的Android.mk 文件中編寫生成我們要用的動(dòng)態(tài)庫(kù)的腳本如下

再接下來,在build.gradle里面編寫編譯腳本即可:

如果不出意外我們的 libbsdiff_utils.so就可以生成了。然后我們編寫Java層的調(diào)用代碼:

新apk文件的合成我們要用到的是patch方法,它的參數(shù) oldPath表示 當(dāng)前apk的文件路徑,newPath表示 合成后的apk文件路徑,patchPath則為 下載的增量包的路徑。

oldPath的取值,比較穩(wěn)妥的做法是把當(dāng)前安裝的apk文件拷貝到一個(gè)可讀可寫的目錄,防止bspatch對(duì)已安裝的apk文件產(chǎn)生破壞。附上獲取當(dāng)前apk文件的路徑的代碼:

靜默安裝實(shí)現(xiàn)

靜默安裝這里采用pm install 命令實(shí)現(xiàn),因此應(yīng)用需要獲取到Root權(quán)限才能執(zhí)行成功。

封裝

為了打造一個(gè)可復(fù)用的軟件更新庫(kù),這里根據(jù)軟件更新的流程抽象了五個(gè)接口,流程與接口的對(duì)應(yīng)關(guān)系如下:更新檢測(cè)(UpdateChecker)

更新檢測(cè)后的UI提示(UpdateCheckUIHandler)

更新文件下載(Downloader)

文件下載時(shí)的UI提示(DownloadUIHandler)

安裝文件(AppInstaller)

如果使用者發(fā)現(xiàn)哪一步不符合自己的需求,只要實(shí)現(xiàn)這個(gè)步驟的接口并注入到全局配置中即可,從而實(shí)現(xiàn)“萬能”的軟件更新功能。

具體實(shí)現(xiàn),請(qǐng)參照源碼:https://github.com/Money888/LibUpgrade.git

更新庫(kù)的使用

第一步,在 Application.onCreate 方法中進(jìn)行初始化

@Override

public void onCreate() {

super.onCreate();

LibUpgradeInitializer.init(this);}

第二步,配置更新庫(kù)功能

第三步,啟用更新檢查功能

//此處的Context默認(rèn)必須為ActivityUpdater.getInstance().check(this);

自定義功能擴(kuò)展使用

1. 增量更新

2. 全量更新

3. 強(qiáng)制更新

4. 普通安裝模式

5. 靜默安裝模式

6. 修改更新時(shí)的提示UI

7. 修改文件下載時(shí)的UI

其它二進(jìn)制差分及合并工具xdelta3

http://xdelta.org/xdelta3.htmljavaxdelta

http://javaxdelta.sourceforge.netcourgette

https://chromium.googlesource.com/chromium/src/courgette更多

每天學(xué)習(xí)累了,看些搞笑的段子放松一下吧。關(guān)注最具娛樂精神的公眾號(hào),每天都有好心情。

總結(jié)

以上是生活随笔為你收集整理的linux 二进制差分工具,打造Android万能的软件更新库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。