我系蒼王沿量,歡迎關(guān)注的源碼分析的第二節(jié)饼丘。
歡迎瀏覽我之前的文章夸浅,有興趣可以參考一下仑最,可以給個(gè)喜歡或者關(guān)注我的文章,謝謝题篷。
[Android]如何做一個(gè)崩潰率少于千分之三噶應(yīng)用app(9)-Small插件化
這一節(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)期待S丫!肝劲!