1,QQ空間的方式,對應的開源實現有Nuwa,對於Nuwa,該專案僅僅只能用只是一個Demo來形容,要用於線上,其背後還需要很多坑去填。
2,Instant run,對應有美團在應用,這種方式和Andfix相比寫補丁都對開發不透明。
3,Andfix,不得不說思路很好,從native入手,同樣是一大堆限制,對開發不透明。Dexposed就不說了。。估計夭折了。
4,微信的方式,和qq空間的方式的區別是不用插樁,無補丁的時候幾乎沒有效能損失,打補丁時需要刪除核心載入類。缺點是需要double的儲存空間。不得不說DexDiff演算法很贊,因為我自己可能只需要DexDiff這部分,在Tinker開源之後,第一時間抽離了這部分程式碼。讓我感到意外的是騰訊對其熱修復框架的命名,最開始放出此命名是在6月份的全球移動開發者大會期間,為何感到意外,因為本人所在公司的熱修復框架也叫Tinker。。。。而對於資源的修復,估計這方面很多人沒有真正接觸過,我在這方面踩了許許多多的坑,最後重新找了一種方式。最開始,我們的目的是直接編譯改變的資源,沒有改變的資源統統不參與編譯。機緣巧合之下,我找到了實現方式,透過aapt的-I引數外加修改一部分原始碼,幾乎可以做到,這樣編譯出來的資源,也就那麼點大小,然而一個天大的坑就擺在面前,這種方式在5.0以下不支援新增,除非預埋資源id,掙扎了很久很久,最終放棄了這種思路。最後借鑑了instant run的方式,全量替換資源,但是資源的patch檔案其實也可以做到很小,只要應用了public.xml,最終沒有改變的資原始檔編譯出來其實也沒有改成,只需要把改變的資源和arsc的diff檔案下發到客戶端合成全量資源即可。Tinker的資源patch部分程式碼沒看,不做評論。instant run的資源實現方式可以說是目前我看到的最簡單的~~~而對於native libs,有兩種方式,一種是從parent BaseDexClassLoader入手,另一種是插到當前classloader的native dir前面。
1,QQ空間的方式,對應的開源實現有Nuwa,對於Nuwa,該專案僅僅只能用只是一個Demo來形容,要用於線上,其背後還需要很多坑去填。
2,Instant run,對應有美團在應用,這種方式和Andfix相比寫補丁都對開發不透明。
3,Andfix,不得不說思路很好,從native入手,同樣是一大堆限制,對開發不透明。Dexposed就不說了。。估計夭折了。
4,微信的方式,和qq空間的方式的區別是不用插樁,無補丁的時候幾乎沒有效能損失,打補丁時需要刪除核心載入類。缺點是需要double的儲存空間。不得不說DexDiff演算法很贊,因為我自己可能只需要DexDiff這部分,在Tinker開源之後,第一時間抽離了這部分程式碼。讓我感到意外的是騰訊對其熱修復框架的命名,最開始放出此命名是在6月份的全球移動開發者大會期間,為何感到意外,因為本人所在公司的熱修復框架也叫Tinker。。。。而對於資源的修復,估計這方面很多人沒有真正接觸過,我在這方面踩了許許多多的坑,最後重新找了一種方式。最開始,我們的目的是直接編譯改變的資源,沒有改變的資源統統不參與編譯。機緣巧合之下,我找到了實現方式,透過aapt的-I引數外加修改一部分原始碼,幾乎可以做到,這樣編譯出來的資源,也就那麼點大小,然而一個天大的坑就擺在面前,這種方式在5.0以下不支援新增,除非預埋資源id,掙扎了很久很久,最終放棄了這種思路。最後借鑑了instant run的方式,全量替換資源,但是資源的patch檔案其實也可以做到很小,只要應用了public.xml,最終沒有改變的資原始檔編譯出來其實也沒有改成,只需要把改變的資源和arsc的diff檔案下發到客戶端合成全量資源即可。Tinker的資源patch部分程式碼沒看,不做評論。instant run的資源實現方式可以說是目前我看到的最簡單的~~~而對於native libs,有兩種方式,一種是從parent BaseDexClassLoader入手,另一種是插到當前classloader的native dir前面。