**修復主要是兩種方案,一種是底層替換方案,一種是類載入方案.這兩種方案各有優劣
底層替換方案是在已經載入了的類中直接替換原有方法,實在原來類的基礎上修改.因此無法實現對原有類的方法和字段的增減,因為這樣將破壞原有的類結構
一旦補丁類中出現了方法的增減,會破壞這個類以及整個dex的方法數的變化.方法數的變化伴隨著索引的變化,在訪問方法時就無法正常的索引到正確的方法.如果欄位的增加或減少和方法數一樣,會導致索引的變化.並且更嚴重的問題是,如果程式執行中間某個類突然增加乙個字段,那麼對原先已經產生的這個類的例項,他們還是原來的結構這個無法改變.而新方法用到老的例項物件時,訪問新增欄位就會產生不可預期的效果.
這是類方案的固有限制,而底層替換方案為人詬病的地方在於不穩定性
傳統的底層替換方案都是直接依賴修改虛擬機器方法實體的具體欄位.這樣帶啦乙個嚴重的問題由於android是開源的,手機廠商可能對原始碼進行修改,如果某個廠商對artmethod結構進行了修改,那麼在修改過的裝置上通用型的替換機制就會出現問題
很多資源熱修復方案都參考了instant run 的實現 簡要來說instan run的資源熱修復分為兩部:
so庫的修復,本質上是對native方法的修復和替換
採用類似類修復反射注入方式,把補丁so庫的路徑,插入到nativelibrarydirectories陣列的最前方,保證載入so庫的時候是補丁so庫而不是原來的so庫,從而達到熱修復目的.
Android 熱修復原理
andfix的原理就是方法的替換,把有bug的方法替換成補丁檔案中的方法。注 在native層使用指標替換的方式替換bug方法,已達到修復bug的目的。andfix採用native hook的方式,這套方案直接使用dalvik replacemethod替換class中方法的實現。由於它並沒有整體替...
Android熱修復原理(二)
阿里系底層熱修復方案特點 修復時,立即生效。但同時帶來各種rom相容問題,也不能做新增field的修復。如sophix andfix阿里系的修復方案 底層替換所操作的指標,實際上是artmethod,在類被載入,類中的每個方法都會有對應的artmethod,它記錄了方法包括所屬類和記憶體位址資訊,a...
Android中熱修復原理及不同框架比較
遇到的問題 setenabledebug true 發布時改為false 改為true時除錯的時候報錯,暫時找不到原因,建議不要寫這行 官方文件首頁 參考1.第一次修復時成功,當第二次修復時只改變補丁檔案不成功,還必須要重新安裝才能成功 2.修改布局不成功 3.類結構不能改變,andfix不支援新增...