www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]隨著現(xiàn)在手機(jī)硬件不斷的提升,分辨率提高手機(jī)的安裝包也是越來(lái)越大了。當(dāng)年NOKIA,MOTO時(shí)代,一個(gè)手機(jī)APP如果有1MB那都是算大的,2MB已經(jīng)不得了了。雖然網(wǎng)絡(luò)、存儲(chǔ)都已經(jīng)大大提升,但是流量還不至

隨著現(xiàn)在手機(jī)硬件不斷的提升,分辨率提高手機(jī)的安裝包也是越來(lái)越大了。當(dāng)年NOKIA,MOTO時(shí)代,一個(gè)手機(jī)APP如果有1MB那都是算大的,2MB已經(jīng)不得了了。雖然網(wǎng)絡(luò)、存儲(chǔ)都已經(jīng)大大提升,但是流量還不至于廉價(jià)到APP改了一個(gè)標(biāo)題要去下載一個(gè)幾兆的程序安裝包。今天就介紹安卓增量下載的實(shí)現(xiàn)。有耐心的先看原理,后面實(shí)踐!

增量升級(jí)的原理

今天我們就來(lái)實(shí)現(xiàn)類似的應(yīng)用的增量升級(jí)。其實(shí)增量升級(jí)的原理很簡(jiǎn)單,即首先將應(yīng)用的舊版本Apk與新版本Apk做差分,得到更新的部分的補(bǔ)丁,例如舊版本的APK有5M,新版的有8M,更新的部分則可能只有3M左右(這里需要說(shuō)明的是,得到的差分包大小并不是簡(jiǎn)單的相減,因?yàn)槠鋵?shí)需要包含一些上下文相關(guān)的東西),使用差分升級(jí)的好處顯而易見(jiàn),那么你不需要下載完整的8M文件,只需要下載更新部分就可以,而更新部分可能只有3、4M,可以很大程度上減少流量的損失。
在用戶下載了差分包之后,需要在手機(jī)端將他們組合起來(lái)??梢詤⒖嫉淖龇ㄊ窍葘⑹謾C(jī)端的舊版本軟件(多半在/data/下),復(fù)制到SD卡或者cache中,將它們和之前的差分patch進(jìn)行組合,得到一個(gè)新版本的apk應(yīng)用,如果不出意外的話,這個(gè)生成的apk和你之前做差分的apk是一致的。

增量升級(jí)的操作

在了解基本的原理之后,我們來(lái)逐步解決其中的各個(gè)難點(diǎn)。首先是差分包patch的生成。如果做過(guò)android手機(jī)OTA升級(jí)的同學(xué)應(yīng)該注意到,在update.zip中的patch文件夾中有需要與系統(tǒng)文件同名但是以xxx.p 為后綴的文件,他們就是生成的差分patch文件。我們可以借鑒OTA系統(tǒng)升級(jí)的差分生成工具來(lái)生成我們單個(gè)應(yīng)用apk的差分patch文件。OTA系統(tǒng)差分包的制作,使用命令:

./ota_from_target_files -n -i

diff_program = DIFF_PROGRAM_BY_EXT.get(ext, “bsdiff”)

至此我們就看到了android中提供我們用來(lái)制作差分增量升級(jí)包的工具,”bsdiff”,這是一個(gè)很牛X開(kāi)源的二進(jìn)制差分工具.相關(guān)的介紹傳送門 相關(guān)的代碼地址 或者在android的代碼目錄下 externalbsdiff bsdiff是二進(jìn)制差分工具,其對(duì)應(yīng)的bspatch是相應(yīng)的補(bǔ)丁合成工具 需要注意的是增量升級(jí)的補(bǔ)丁包,是需要在服務(wù)器端,即PC端完成,大致流程如,制作補(bǔ)丁時(shí)調(diào)用bsdiff函數(shù),根據(jù)兩個(gè)不同版本的二進(jìn)制文件,生成補(bǔ)丁文件。

命令:bsdiff oldfile newfile patchfile
例如: bsdiff xx_v1.0.apk xx_v2.0.apk xx.patch

將生成的補(bǔ)丁包 xx.patch放置在升級(jí)服務(wù)器上,供用戶下載升級(jí),對(duì)應(yīng)多版本需要對(duì)不同的版本進(jìn)行差分,對(duì)于版本跨度較大的,建議整包升級(jí)。 用戶在下載了 xx.patch補(bǔ)丁包后,需要用到補(bǔ)丁所對(duì)應(yīng)的apk,即原來(lái)系統(tǒng)安裝的舊版本apk和補(bǔ)丁合成的bspatch工具。系統(tǒng)舊版本的apk可以通過(guò)copy系統(tǒng)data/app目錄下的apk文件獲取,而補(bǔ)丁合成的bspatch可以通過(guò)將bspatch源碼稍作修改,封裝成一個(gè)so庫(kù),供手機(jī)端調(diào)用。

bspatch的命令格式為:
bspatch oldfile newfile patchfile

和差分時(shí)的參數(shù)一樣。合成新的apk便可以用于安裝。 以上只是簡(jiǎn)單的操作原理,增量升級(jí)還涉及很多其他方面,例如,升級(jí)補(bǔ)丁校驗(yàn)等問(wèn)題,可以參考android源碼中bootablerecoveryapplypatch的相關(guān)操作,本文只是淺析,在此不表。 不足 增量升級(jí)并非完美無(wú)缺的升級(jí)方式,至少存在以下兩點(diǎn)不足: 1.增量升級(jí)是以兩個(gè)應(yīng)用版本之間的差異來(lái)生成補(bǔ)丁的,你無(wú)法保證用戶每次的及時(shí)升級(jí)到最新,所以你必須對(duì)你所發(fā)布的每一個(gè)版本都和最新的版本作差分,以便使所有版本的用戶都可以差分升級(jí),這樣操作相對(duì)于原來(lái)的整包升級(jí)較為繁瑣,不過(guò)可以通過(guò)自動(dòng)化的腳本批量生成。 2.增量升級(jí)成功的前提是,用戶手機(jī)端必須有能夠讓你拷貝出來(lái)且與你服務(wù)器用于差分的版本一致的apk,這樣就存在,例如,系統(tǒng)內(nèi)置的apk無(wú)法獲取到,無(wú)法進(jìn)行增量升級(jí);對(duì)于某些與你差分版本一致,但是內(nèi)容有過(guò)修改的(比如破解版apk),這樣也是無(wú)法進(jìn)行增量升級(jí)的,為了防止合成補(bǔ)丁錯(cuò)誤,最好在補(bǔ)丁合成前對(duì)舊版本的apk進(jìn)行sha1sum校驗(yàn),保證基礎(chǔ)包的一致性。 小實(shí)驗(yàn) 多說(shuō)無(wú)益,實(shí)踐才是王道。下面就來(lái)簡(jiǎn)單實(shí)踐一下,檢測(cè)之前理論的正確性。

├── bsdiff-4.3 //bsdiff的源碼路徑,官網(wǎng)獲取
│ ├── bsdiff.1
│ ├── bsdiff.c
│ ├── bspatch.1
│ ├── bspatch.c
│ └── Makefile
├── bsdiff-4.3.tar.gz
├── bsdiff4.3-win32 //windows PC端的測(cè)試工具
│ ├── Binary diff.txt
│ ├── bsdiff.exe
│ ├── bspatch.exe
│ └── LICENSE
├── bspatch //手機(jī)端的測(cè)試工具
├── oldAPK1.6.2.apk // 舊版本的apk
└── newAPK1.8.0.apk //新版本的apk

APK來(lái)做測(cè)試,在shell進(jìn)入testbsdiff4.3-win32文件夾,并下運(yùn)行命令:

1bsdiff.exe oldAPK1.6.2.apk newAPK1.8.0.apk apk.patch

原來(lái)的apk(2.94M),新版本的(3.24M),得到的patch文件為1.77M,用戶需要下載的就只是1.77M,流量節(jié)省了很多。 下面先在電腦端將他們合并。


bspatch.exe oldAPK1.6.2.apk new.apk apk.patch

執(zhí)行后得到名為new.apk 的合成版本應(yīng)用。這個(gè)和我們newAPK1.8.0.apk其實(shí)是一樣的。
現(xiàn)在寫一個(gè)安卓小DEMO出來(lái),測(cè)試一下這個(gè)工具。直接在創(chuàng)建安卓工程的時(shí)候添加native支持,在CPP文件中添加以下代碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205#include"com_droidupdate_jni_PatchUtil.h"#include"bzlib_private.h"#include"bzlib.h"#include#include#include#include#include#include#includestaticoff_t offtin(u_char *buf) {off_t y;y = buf[7] & 0x7F;y = y * 256;y += buf[6];y = y * 256;<code class="java plain" style="border:0px!important; padding:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; margin:0px!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:base

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

其他電腦(比如安卓手機(jī)/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問(wèn)一些東西。你可以使用android的USB OTG功能(是的,幾乎每個(gè)android都支持這個(gè)功能,你可以將鼠標(biāo)和鍵盤連接到它)。

關(guān)鍵字: USB 鼠標(biāo) Android 樹(shù)莓派

Google 宣布與中國(guó) AR 科技公司 XREAL 達(dá)成深度戰(zhàn)略合作,聯(lián)合推出全球首款專為 Android XR 平臺(tái)打造的旗艦級(jí) AR 眼鏡 Project Aura。

關(guān)鍵字: Google XREAL Android XR眼鏡 AR

繼停止維護(hù)AOSP開(kāi)源項(xiàng)目后,谷歌母公司Alphabet近日被曝在其安卓系統(tǒng)(Android)、Pixel手機(jī)以及Chrome瀏覽器等部門裁員數(shù)百人。這一舉措引發(fā)了業(yè)界的廣泛關(guān)注,也引發(fā)了對(duì)谷歌未來(lái)業(yè)務(wù)布局的諸多猜測(cè)。

關(guān)鍵字: 谷歌 AOSP Android 裁員

在本教程中,我們將使用Capacitor 6、Angular和TypeScript構(gòu)建一個(gè)Android應(yīng)用程序,該應(yīng)用程序通過(guò)串行端口連接到BleuIO USB加密狗。該應(yīng)用程序允許用戶直接從Android設(shè)備發(fā)送和接...

關(guān)鍵字: Android USB 電容器 BLE設(shè)備

早前媒體報(bào)道谷歌將停止維護(hù)Android開(kāi)源項(xiàng)目(AOSP),將Android開(kāi)發(fā)全面轉(zhuǎn)向內(nèi)部閉源分支,目前這一消息已經(jīng)得到谷歌官方確認(rèn)。

關(guān)鍵字: 谷歌 Android 開(kāi)源

本項(xiàng)目演示了如何通過(guò)OTG (on - go) USB在Android設(shè)備上使用BleuIO USB加密狗作為串行端口。使用電容器6和@adeunis/電容器-串行插件,我們建立串行連接,發(fā)送AT命令,并實(shí)時(shí)讀取響應(yīng)。該...

關(guān)鍵字: 電容器 Android 傳感器 微控制器 嵌入式系統(tǒng)

在Linux操作系統(tǒng)中,Android Debug Bridge(ADB)是一個(gè)功能強(qiáng)大的命令行工具,它允許開(kāi)發(fā)者在計(jì)算機(jī)和Android設(shè)備之間建立通信,從而進(jìn)行調(diào)試、管理、安裝應(yīng)用等操作。本文將詳細(xì)介紹在Linux系...

關(guān)鍵字: Linux系統(tǒng) Android Debug ADB

隨著Android操作系統(tǒng)的進(jìn)步,智能手機(jī)的使用日益增加。隨后,有報(bào)道稱,惡意個(gè)人和黑客利用 Android 提供的漏洞來(lái)訪問(wèn)用戶珍視的數(shù)據(jù)。例如,此類威脅包括 2021 年針對(duì) Android 設(shè)備發(fā)布的 Flubot...

關(guān)鍵字: Android 惡意軟件

在本教程中,我們將構(gòu)建超出電子領(lǐng)域的東西。作為一名電子工程師,我們大多數(shù)人都想為我們的物聯(lián)網(wǎng)應(yīng)用程序構(gòu)建一些用戶界面,在大多數(shù)情況下,Android應(yīng)用程序?qū)⑹怯脩襞c我們的物聯(lián)網(wǎng)設(shè)備交互的正確選擇。所以,如果你想為你的物...

關(guān)鍵字: 物聯(lián)網(wǎng) Android
關(guān)閉