微信開源,真是喜出望外,必須要去看看啊,比起nuwa來微信好很多,而且github上也有專門的官方文檔說明,還有很多資料查詢 參考地址:https://github.com/Tencent/tinker/wiki https://github.com/Tencent/tinker/wiki/Tink ...
微信開源,真是喜出望外,必須要去看看啊,比起nuwa來微信好很多,而且github上也有專門的官方文檔說明,還有很多資料查詢
參考地址:https://github.com/Tencent/tinker/wiki
https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
想著以前研究的時候還要分包塊什麼一些複雜想法,現在發展到這種程度,真是三天不打就上房揭瓦了,很好比喻互聯網,學習不能斷,可能在不知不覺的時候就已經發展幾個階段了
看對比圖也知道了,微信的方式,和qq空間的方式的區別是不用插樁,無補丁的時候幾乎沒有性能損失,打補丁時需要刪除核心載入類
文檔還是挺詳細的,照著文檔來,基本跑通就沒問題了
首先肯定是下載demo了,然後文檔上介紹了幾種方案,也是推薦gradle生成配置(見下圖),demo里也是那樣做的,那我們肯定也是走這個方案了
集成的時候demo里的gradle配置上用的 TINKER_ID 是獲取的git的版本號,這個搞起來麻煩,文檔上有結束,可以換成versionName等,我就換的versionName,這個 TINKER_ID 要註意保持一致,不然會失敗
然後直接運行程式,或者build apk,成功後在你的項目路徑app\build\bakApk里應該會有apk生成
然後可以修改你的bug了,修改好之後在As的terminal終端使用命令行 gradlew tinkerPatchDebug,可不能直接用你自己的apk改個名字就丟上去了,那樣就over了
然後看到successful,這個時候在你項目的目錄里就會有生成apk了,app\build\outputs\tinkerPatch\debug\
這個就是你的補丁了,把這個apk放到手機根目錄就行了
點開你的app,點擊load patch,你會看到一個列印出 patch success, please restart process的toast,然後點擊SHOW INFO可以查看到詳細的信息顯示補丁包已經載入成功了,github本身就很多介紹的資料,可以結合別人寫的好的博客看看學習,讓自己更快的掌握
/**
*個人理解
*微信針對QQ空間超級補丁技術的不足提出了一個提供DEX差量包,整體替換DEX的方案。主要的原理是與QQ空間超級補丁技術基本相同,整體替換掉舊的DEX,達到修複的目的
**/
SampleApplication是gradle自動生成的,繼承自 TinkerApplication ,然後設置捕捉代碼異常,onBaseContextAttached就是我們要找的關鍵代碼了
這代碼大致是反射調用TinkerLoader的tryLoad()方法拿到載入補丁結果,載入補丁包,反射調用同步周期,重置安全模式次數,大於等於三次會進入安全模式不再載入,一點點理解
深入研究很是複雜的,正如微信張紹文所說,這真是一條跪著走完的路,而且我們可以不用跪了,先乘個涼