首先叭披,SophixManager的initialize被調(diào)用之前的代碼無法修復(fù)寥殖。很好理解,熱修復(fù)框架都沒加載起來涩蜘,怎么可能修復(fù)到呢嚼贡?所以最好的做法是把初始化放在Application.attachBaseContext或者Application.onCreate的最開始。
并且同诫,調(diào)用initialize的所在類無法被修復(fù)粤策。正常情況下,初始化都會放在入口Application類里面误窖,因此Application是無法修復(fù)的叮盘。還需注意的是秩贰,Application中直接用到的類無法增減方法和字段,原因是在odex之后柔吼,Application訪問這些類時可能被優(yōu)化為固定偏移萍膛,因此增減方法和字段會導(dǎo)致這些字段的偏移出錯。因此建議減少Application直接用到的類嚷堡,盡量把它們都封裝到一個單獨類里面蝗罗,并且使用反射調(diào)用可以避免偏移優(yōu)化。
其次蝌戒,AndroidManifest.xml里面的變動無法修復(fù)串塑。因為AndroidManifest.xml是由系統(tǒng)在安裝app時解析,因此在運行時app無法修改它的邏輯的北苟。所以四大組件的新增和修改以及其中主題資源等配置都無法修復(fù)到桩匪。除非用比較hack的方式預(yù)先留空和提早注冊,而這種方式就顯得不夠優(yōu)雅了友鼻,不過開發(fā)者可以自己在AndroidManifest里面預(yù)留些空組件傻昙,后續(xù)更新時直接添加組件類即可。
對于資源彩扔,除了AndroidManifest.xml里面的資源不支持妆档,通知欄圖標(biāo)、啟動圖標(biāo)資源以及RemoteViews也不支持修復(fù)虫碉。原因是這類資源是由系統(tǒng)負責(zé)展示的贾惦,而系統(tǒng)只會在安裝包中找資源,不會找到補丁包敦捧。尤其需要注意的是须板,如果通知的圖標(biāo)發(fā)生變動,會導(dǎo)致推送通知時因找不到資源而崩潰兢卵,因此每次打補丁時務(wù)必使得通知的圖標(biāo)不變习瑰。
另外,Sophix里熱修復(fù)框架本身的代碼默認不進行修復(fù)
除這上述情況秽荤,其他方面的所有熱修復(fù)都可以得到支持甜奄。