欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android熱修復(fù)原理-創(chuàng)新互聯(lián)

一. AndFix

我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好網(wǎng)站制作、成都網(wǎng)站制作服務(wù),我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),微信平臺小程序開發(fā),網(wǎng)站開發(fā),技術(shù)開發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術(shù)開發(fā)工程師。

AndFix的原理就是方法的替換,把有bug的方法替換成補(bǔ)丁文件中的方法。
Android熱修復(fù)原理
注:在Native層使用指針替換的方式替換bug方法,已達(dá)到修復(fù)bug的目的。

AndFix采用native hook的方式,這套方案直接使用dalvik_replaceMethod替換class中方法的實(shí)現(xiàn)。由于它并沒有整體替換class, 而field在class中的相對地址在class加載時(shí)已確定,所以AndFix無法支持新增或者刪除filed的情況(通過替換init與clinit只可以修改field的數(shù)值)。Andfix可以支持的補(bǔ)丁場景相對有限,僅僅可以使用它來修復(fù)特定問題。
二. QZone(插樁方式)

該方案基于的是android dex分包方案的, 簡單的概括一下,就是把多個(gè)dex文件塞入到app的classloader之中,但是android dex拆包方案中的類是沒有重復(fù)的,如果classes.dex和classes1.dex中有重復(fù)的類,當(dāng)用到這個(gè)重復(fù)的類的時(shí)候,系統(tǒng)會(huì)選擇哪個(gè)類進(jìn)行加載呢? ?讓我們來看看類加載的代碼:

Android熱修復(fù)原理

一個(gè)ClassLoader可以包含多個(gè)dex文件,每個(gè)dex文件是一個(gè)Element,多個(gè)dex文件排列成一個(gè)有序的數(shù)組dexElements,當(dāng)找類的時(shí)候,會(huì)按順序遍歷dex文件,然后從當(dāng)前遍歷的dex文件中找類,如果找類則返回,如果找不到從下一個(gè)dex文件繼續(xù)查找。

理論上,如果在不同的dex中有相同的類存在,那么會(huì)優(yōu)先選擇排在前面的dex文件的類,如下圖:

Android熱修復(fù)原理

在此基礎(chǔ)上,我們構(gòu)想了熱補(bǔ)丁的方案,把有問題的類打包到一個(gè)dex(patch.dex)中去,然后把這個(gè)dex插入到Elements的最前面,如下圖:Android熱修復(fù)原理

三. 微信Tinker(差量包)

Instant Run的冷插拔與buck的exopackage或許能給我們靈感,它們的思想都是全量替換新的Dex。

我們可以將新舊兩個(gè)Dex的差異放到補(bǔ)丁包中,最簡單我們可以采用BsDiff算法。

Android熱修復(fù)原理

簡單來說,在編譯時(shí)通過新舊兩個(gè)Dex生成差異path.dex。在運(yùn)行時(shí),將差異patch.dex重新跟原始安裝包的舊Dex還原為新的Dex。這個(gè)過程可能比較耗費(fèi)時(shí)間與內(nèi)存,所以我們是單獨(dú)放在一個(gè)后臺進(jìn)程:patch中。為了補(bǔ)丁包盡量的小,微信自研了DexDiff算法,它深度利用Dex的格式來減少差異的大小。
四、阿里Sophix

原理(雙劍合璧):

Android熱修復(fù)原理

1.優(yōu)化Andfix(突破底層結(jié)構(gòu)差異,解決穩(wěn)定性問題):


Andfix底層ArtMethod結(jié)構(gòu)時(shí)采用內(nèi)部變量一一替換,倒是這個(gè)各個(gè)廠商是會(huì)修改的,所以兼容性不好。

Android熱修復(fù)原理

Sophix改變了一下思路,采用整體替換方法結(jié)構(gòu),忽略底層實(shí)現(xiàn),從而解決兼容穩(wěn)定性問題。

Android熱修復(fù)原理

2.突破QQ和Tinker的缺陷


QQ和Tinker的缺陷

Android熱修復(fù)原理

Sophix對dex的解決方案

  • Dalvik下采用阿里自研的全量dex方案:不是考慮把補(bǔ)丁包的dex插到所有dex前面(dex插樁),而是想辦法在原理的dex中刪除(只是刪除了類的定義)補(bǔ)丁dex中存在的類,這樣讓系統(tǒng)查找類的時(shí)候在原來的dex中找不到,那么只有補(bǔ)丁中的dex加載到系統(tǒng)中,系統(tǒng)自然就會(huì)從補(bǔ)丁包中找到對應(yīng)的類。
  • Art下本質(zhì)上虛擬機(jī)以及支持多dex的加載,Sophix的做法僅僅是把補(bǔ)丁dex作為主dex(classes.dex)而已,相當(dāng)于重新組織了所有的dex文件:把補(bǔ)丁包的dex改名為classes.dex,以前apk的所有dex依次改為classes2.dex、classes3.dex ... classesx.dex,如下圖所示。

Android熱修復(fù)原理

3.資源修復(fù)另辟蹊徑


常用方案(Instant Run技術(shù)):這種方案的兼容問題在于替換AssetManager的地方

Android熱修復(fù)原理

Sophix資源修復(fù)方案

Android熱修復(fù)原理

4.SO修復(fù)另辟蹊徑


Android熱修復(fù)原理

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:Android熱修復(fù)原理-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://www.chinadenli.net/article20/gsdco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊微信小程序面包屑導(dǎo)航網(wǎng)頁設(shè)計(jì)公司網(wǎng)站策劃全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)