熱修復(fù)方案目前來講,穩(wěn)定性最好當屬Tinker了。它已經(jīng)運行在數(shù)億臺安卓設(shè)備上了。
它的接入方式可以參考官方github地址,點擊wiki,里面有詳細的接入方式。同時,參考文章也提供了很多接入的信息,可以一起看看,有助于快速接入。
原理

image.png
可以看出:
tinker將old.apk和new.apk做了diff,拿到patch.dex,然后將patch.dex與本機中apk的classes.dex做了合并,生成新的classes.dex,運行時通過反射將合并后的dex文件放置在加載的dexElements數(shù)組的前面。
運行時替代的原理,其實和Qzone的方案差不多,都是去反射修改dexElements。
兩者的差異是:Qzone是直接將patch.dex插到數(shù)組的前面;而tinker是將patch.dex與app中的classes.dex合并后的全量dex插在數(shù)組的前面。
tinker這么做的目的還是因為Qzone方案中提到的CLASS_ISPREVERIFIED的解決方案存在問題;而tinker相當于換個思路解決了該問題。
接下來我們就從代碼中去驗證該原理。
參考文章
https://github.com/Tencent/tinker/wiki
http://blog.csdn.net/lmj623565791/article/details/54882693
http://blog.csdn.net/a750457103/article/details/52815096