android-hotfix(QQ空间思路)浅析
生活随笔
收集整理的這篇文章主要介紹了
android-hotfix(QQ空间思路)浅析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
android-hotfix(QQ空間思路)淺析 hotfix,最直觀的理解就是我們用的windows系統了。 windows系統會不定期下發一些補丁,我們安裝這些補丁,系統的BUG也就被修復了。 所以說,hotfix是一種有效修復BUG的方式。 app產品不同于web產品,app硬傷之一便是不能及時修正BUG,制作修復包->用戶下載新包->安裝,這個流程不僅復雜,而且也不能保證線上版本就是修復版,BUG還是會一直存在的。 如果在android端能夠實現hotfix,那么BUG修復就不會那么復雜了,同時也能夠收斂app版本。 最近學習了QQ空間的熱修復思路,同時也研究了一下github上基于此種思路的實現方案,接下來總結一下這種方案吧 實踐基礎: 1.QQ空間的熱修補思路?????http://bugly.qq.com/blog/?p=781??? (必讀哦) 2.github開源項目 dodola/HotFix?????https://github.com/dodola/HotFix????(百度同學實現) jasonross/Nuwa https://github.com/jasonross/Nuwa?(點評同學實現) 適用范圍: 已經測試了4.0至6.0的系統版本,均能實現熱修補。 dodola的實現方案非常簡單,作為demo非常好,能夠理解整個hotfix流程。 nuwa的實現更完善一些,可供大家直接使用。 接下來串一下思路,對hotfix有一個印象: 1.針對線上apk中的BUG,我們可以考慮通過hotFix用fixed類替換bug類,替換后即可正常運行。 **需要對bug類進行修復,修正為fixed類,再考慮用fixed類替換bug類。 2.要用fixed.class替換bug.class,就需要classLoader加載的是fixed.class而不是bug.class **通過動態修改classLoader里的pathList,將fixed.class放置到bug.class前面,classLoader加載到fixed.class就不會再繼續尋找bug.class了。 3.apk在安裝階段進行dex->odex時會判斷class直接引用是否都在當前dex內,若是則打上CLASS_ISPREVERIFIED標記。若被打上此標記,則class只會在當前dex中查找直接引用的class,不能達到替換的效果。 **要對替換類的引用類進行清除CLASS_ISPREVERIFIED標記操作,做法是打包階段class中動態插入其他dex中的class,可以借助javassist。 自此,我們清楚了,進行hotfix需要解決兩個問題: 1.盡量把所有的類都去掉CLASS_ISPREVERIFIED標記,這樣才能隨心所欲的進行class替換(性能什么的,是可以優化的,BUG可是要崩潰的)。所以我們要制作一個inject_dex,動態注入到盡量多的類里。 2.我們要打包fixed_dex,將需要替換的class放到里邊。 那么接下來從代碼的流程上看一下怎么來實現: 1.A工程中寫一個BugClass.java,里邊有一個方法,return “bug”。 2.B工程中寫一個類AntilazyLoad.java,不含有任何內容,就是用來讓A工程引用外部class的。 3.A工程中寫一個HotFix.java,里邊包含合并dex的代碼,并且將其他dex放到A.dex前面。 4.A工程中的Application中調用HotFix進行合并dex,保證A.dex在其他dex之后。 5.A工程在打包階段通過javassist進行動態注入,將AnitilazyLoad.class注入到需要替換的類構造器中。(這一步清除了CLASS_ISPREVERIFIED)。 6.對AntilazyLoad和修正后的BugClass分別打包,inject_dex和fixed_dex。 7.放入到assets中,供Application初始化的時候進行處理。fixed_dex一般都是放在云端的,但是從云端和assets中獲取,實際上沒啥差別,demo就用assets就可以了。 運行,在Application中合并dex后,實際上已經修復了BUG。 還有dexposed和andFix以及其他方案,待后續學習。? posted on 2015-12-11 12:14 puff_pig 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/puff/p/5038616.html
總結
以上是生活随笔為你收集整理的android-hotfix(QQ空间思路)浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS: 环信的推送
- 下一篇: Poj_1325 Machine Sch