熱修復(fù)方案目前來講,穩(wěn)定性最好當(dāng)屬Tinker了故硅。它已經(jīng)運(yùn)行在數(shù)億臺(tái)安卓設(shè)備上了庶灿。
它的接入方式可以參考官方github地址,點(diǎn)擊wiki吃衅,里面有詳細(xì)的接入方式往踢。同時(shí),參考文章也提供了很多接入的信息徘层,可以一起看看峻呕,有助于快速接入。
原理
可以看出:
tinker將old.apk和new.apk做了diff趣效,拿到patch.dex瘦癌,然后將patch.dex與本機(jī)中apk的classes.dex做了合并,生成新的classes.dex英支,運(yùn)行時(shí)通過反射將合并后的dex文件放置在加載的dexElements數(shù)組的前面佩憾。
運(yùn)行時(shí)替代的原理哮伟,其實(shí)和Qzone的方案差不多干花,都是去反射修改dexElements。
兩者的差異是:Qzone是直接將patch.dex插到數(shù)組的前面楞黄;而tinker是將patch.dex與app中的classes.dex合并后的全量dex插在數(shù)組的前面池凄。
tinker這么做的目的還是因?yàn)镼zone方案中提到的CLASS_ISPREVERIFIED的解決方案存在問題;而tinker相當(dāng)于換個(gè)思路解決了該問題鬼廓。
接下來我們就從代碼中去驗(yàn)證該原理肿仑。
參考文章
https://github.com/Tencent/tinker/wiki
http://blog.csdn.net/lmj623565791/article/details/54882693
http://blog.csdn.net/a750457103/article/details/52815096