『壹』 微信開源的 android 熱補丁框架 tinker 什麼來頭
他是參考國外的框架而來,如下內容:
Tinker v1.0-性能極致追求之路
為了穩定性與兼容性內,微信容選擇了Java流派。當前最大難點在於如何突破Qzone方案的性能問題,這時通過研究Instant Run的冷插拔與buck的exopackage給了我們靈感。它們的思想都是全量替換新的Dex。
簡單來說,我們通過完全使用了新的Dex,那樣既不出現Art地址錯亂的問題,在Dalvik也無須插樁。當然考慮到補丁包的體積,我們不能直接將新的Dex放在裡面。但我們可以將新舊兩個Dex的差異放到補丁包中,這里我們可以調研的方法有以下幾個:
BsDiff;它格式無關,但對Dex效果不是特別好,而且非常不穩定。當前微信對於so與部分資源,依然使用bsdiff演算法;
DexMerge;它主要問題在於合成時內存佔用過大,一個12M的dex,峰值內存可能達到70多M;
DexDiff;通過深入Dex格式,實現一套diff差異小,內存佔用少以及支持增刪改的演算法。