Android 基於Proxy/Delegate 實現bug熱修複,androiddelegate

來源:互聯網
上載者:User

Android 基於Proxy/Delegate 實現bug熱修複,androiddelegate
一.概述

       現在越來越多的app開始採用本地app結合html5的設計結構,這樣做不僅可以跨平台,並且在某個業務或模組出了嚴重的bug,可以直接在html5+後台即時修複,省去了發布新包和新版本的步驟.那麼在不是html5結構的android app中怎麼實現不重新打封裝更新版本的情況下實現熱修複bug呢?這裡介紹的一種方法是通過升級dex檔案來修複線上包的緊急bug。

二.執行個體

       該執行個體是之前一篇 Android源碼之DeskClock(三) Proxy/Delegate Application 架構應用 的延伸.

       這篇講關於熱修複採用的是Proxy/Delegate Application 架構.

       主要實現的流程:

       1.替換主程式dex檔案為代理啟動程式的dex檔案

       2.代理啟動程式啟動後,動態載入主程式dex

       3.ProxyApplication替換消除本身Context引用為MyApplication

       4.啟動主程式的Application.

       經過上述的步驟處理,由於程式啟動dex只是一個代理,而主程式的dex是動態載入的,所以就可以達到不升級主程式不更改版本號碼只升級dex檔案來修複線上緊急bug的目的.

       因為這裡使用了兩個dex檔案,所以就要把之前部落格裡面的ProxyApplication整個剝離出來,作為一個Module,跟主程式同級.

                                                           

       之前那篇部落格因為沒有替換ClassLoader的需求,所以在MyProxyApplication中複寫了一個空的attachBaseContext方法,這裡就需要在attachBaseContext反射替換MyProxyApplication的ClassLoader的父類的執行個體為主程式dex的DexClassLoader,這樣既能動態載入主dex,有能讓外部包括DelegateApplication自身都以為DelegateApplication是程式的第一個入口.

        ClassLoader curLoader = ctx.getClassLoader();        DexClassLoader parentLoader = new DexClassLoader(dexPath, outputDir.getAbsolutePath(), nativeLibraryDir, curLoader.getParent());        Field f = ClassLoader.class.getDeclaredField("parent");        f.setAccessible(true);        f.set(curLoader, parentLoader);
       這個時候主程式的dex檔案就在其他路徑下放著,等待代理啟動dex來載入他,這樣就可以通過從伺服器上下載更新dex到該路徑下就OK了.這種修複方式由於只是替換了dex檔案,沒有更新資源檔,所以只能修複一些不牽扯到更改現有資源的緊急bug.相信在大多數情況下也夠用了.並且基於Proxy/Delegate也可以很好得做擴充,例如外掛程式化,多dex技術等.

轉載請註明出處:http://blog.csdn.net/l2show/article/details/46967987

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.