瞎寫:Tinker_imitator微信熱更新方案

這里只記錄本人對此方案的理解,以及根據(jù)自己實際情況對此方案的后續(xù)改進和想法,全是瞎寫。
Tinker_imitator是微信熱更新方案實現(xiàn), 由zzz40500大神提供的方案 源碼地址, Tinker_imitator 原理篇

根據(jù)作者提供的步驟操作開始一切順利,但是打包patch時使用插件提示no version can be fix,無法生成補丁包,目前不知道zzz40500修復沒

圖patch

用jd-gui看插件部分代碼
List<FixApkVersionBean> applicationFacets = getApplicationFacets(anActionEvent.getProject());
的applicationFacets 為null,applicationFacets 為圖patch中的相關文件,文件真實存在,為什么會出這個bug我沒去過多探究,我采用命令的方式生成patch包(bsdiff的相關命令)。測試可行。
Tinker_imitator中主要就這三個

buildSrc

這個是用于干擾gradle打包,生成patch文件的代碼,具體看原理篇里有解釋。主要就是用來記錄class文件的MD5值,用于比較前后class是否有變化,在生成patch時選擇性的生成patch包,如:classes.dex類中有變化,而classes2.dex無變化,只打classes.dex的patch包。

library

用于app加載patch包的代碼,這里以后有時間在具體分析。

使用中的一些問題

在實際使用過程中,直接使用兩apk里的dex文件就可直接生成patch包,可以根據(jù)dex的頭文件來判斷dex是否一致,并不需要buildSrc,可能作者是有其他考慮,我沒有細致看代碼,只是看原理篇得出的粗淺結(jié)論。

dex頭文件結(jié)構

根據(jù)checksum和siganture就能確定兩文件是否相同。

現(xiàn)在可以用其他方式確定哪個dex改變了,可以用bsdiff命令來生成相應patch了。

后續(xù)我有時間自己用Java寫個工具可以把新舊apk差分成patch。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容