阿里系底層熱修復方案特點:修復時,立即生效。但同時帶來各種rom相容問題,也不能做新增field的修復。如sophix
andfix阿里系的修復方案:底層替換所操作的指標,實際上是artmethod,在類被載入,類中的每個方法都會有對應的artmethod,它記錄了方法包括所屬類和記憶體位址資訊,andfix正是通過篡改artmethod,將補丁方法artmethod的成員值逐一賦給舊方法,實現替換。問題就出現在這個逐一上。因為andfix的artmethod方法結構是根據android開源**寫死的,面對國內廠商的定製,經常會導致兩者artmethod方法結構不一致,這也是相容問題產生的根本原因。
sophix為解決這種問題進行artmethod全量拷貝替換。使用動態測量artmethod的size(c層的mempy(dest ,src ,size)方法)
在art虛擬機器下,預設支援多dex載入,虛擬機會優先載入命名為classes.dex的檔案。sophix利用了這一點,將補丁檔案命名為classes.dex,並對原有dex檔案進行排序。這樣一來,art虛擬機器就會先載入補丁檔案,後續載入的同類名的類會被忽略,最後將載入得到的dexfile把dexelements整體替換。
dalvik虛擬機器下情況則有些不同,dalvik預設只載入classes.dex,其他dex則被忽略。從類的維度,對照補丁包中出現的類,在原有包中做刪除操作,為了避免刪除整個類資訊而導致dex結構發生偏移,所以只對舊包中類的入口進行刪除,實際上類的資訊還在dex包中。同時避免dex合成過程發生在虛擬機器堆記憶體上
Android熱修復原理
修復主要是兩種方案,一種是底層替換方案,一種是類載入方案.這兩種方案各有優劣 底層替換方案是在已經載入了的類中直接替換原有方法,實在原來類的基礎上修改.因此無法實現對原有類的方法和字段的增減,因為這樣將破壞原有的類結構 一旦補丁類中出現了方法的增減,會破壞這個類以及整個dex的方法數的變化.方法數的...
Android 熱修復原理
andfix的原理就是方法的替換,把有bug的方法替換成補丁檔案中的方法。注 在native層使用指標替換的方式替換bug方法,已達到修復bug的目的。andfix採用native hook的方式,這套方案直接使用dalvik replacemethod替換class中方法的實現。由於它並沒有整體替...
Android中熱修復原理及不同框架比較
遇到的問題 setenabledebug true 發布時改為false 改為true時除錯的時候報錯,暫時找不到原因,建議不要寫這行 官方文件首頁 參考1.第一次修復時成功,當第二次修復時只改變補丁檔案不成功,還必須要重新安裝才能成功 2.修改布局不成功 3.類結構不能改變,andfix不支援新增...