Small插件化源碼分析--熱更流程

我系蒼王,歡迎關(guān)注的源碼分析的第二節(jié)。

歡迎瀏覽我之前的文章,有興趣可以參考一下,可以給個(gè)喜歡或者關(guān)注我的文章,謝謝。

[Android]如何做一個(gè)崩潰率少于千分之三噶應(yīng)用app(9)-Small插件化

Small插件化源碼分析--啟動(dòng)流程


這一節(jié)我們要說(shuō)的熱更的流程的源碼

二.熱更流程

1.在app.home里面的MainFragment,官方提供了checkUpgrade的函數(shù)

我們可以看到UpgradeManager里面會(huì)調(diào)用requestUrgradeInfo的函數(shù)

這里通過(guò)http下載需要更新的bundles.json,封裝updateInfo的列表里面

可以看到j(luò)son里面updates的關(guān)鍵字,包括pkg名字和url下載地址

之后再調(diào)用updateBundles的方法

(1)首先更新一線新的模塊的列表,跳轉(zhuǎn)到Bundle里面

并非強(qiáng)力更新force為false,會(huì)添加需要加載的Bundles到sUpdateBundles列表里面

(2)通過(guò)遍歷updateInfo列表,通過(guò)用包名獲取之前bundle的patch文件,然后http協(xié)議來(lái)下載url的so內(nèi)容替換掉原來(lái)的那一個(gè)

最后ui調(diào)用bundle.update


最后會(huì)調(diào)用SharedPreferences記錄需要更新的標(biāo)志位

但是這時(shí)候還不會(huì)立刻生效,如果我們按home鍵,然后會(huì)調(diào)用InstrumentationWrapper(繼承于Instrumenttation)的聲明周期,會(huì)走stop的生命周期。

判斷如果存在更新的標(biāo)志位,會(huì)把后臺(tái)的屬于這個(gè)app的process全部kill掉

再重新啟動(dòng)后,跑到ApkBundleLauncher的postSetup的函數(shù),調(diào)用刪除apk的opDexFile,然后標(biāo)志回去標(biāo)志位

這一節(jié)熱更流程的解說(shuō)就到這里了

下一章介紹的內(nèi)容,敬請(qǐng)期待!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容