標籤:
360技術團隊地址:http://blogs.360.cn/blog/proxydelegate-application/
Android 外掛程式開發,做成動態載入
美團Android DEX自動拆包及動態載入簡介
實現一些特殊需求,如介面換膚、外掛程式化等,我們希望改變應用的運行環境(surrounding)。例如,我們希望某個應用在運行時,所有Class(包括自訂Application,下面假設它叫MyApplication)都被一個自訂的ClassLoader載入。
要實現這個需求,需要在MyApplication被載入之前,先替換掉API層的預設ClassLoader,否則MyApplication就會被預設ClassLoader載入。但這會產生一個悖論,MyApplication被載入之前,沒有任何應用代碼可以運行,替換ClassLoader無法辦到。Proxy/Delegate Application架構就是用來解決這類問題的。
在Proxy/Delegate Application架構裡,應用一共有兩個Application對象,一個稱為ProxyApplication,另一個稱為DelegateApplication:
(1) ProxyApplication:架構會提供一個ProxyApplication抽象基類(abstract class),使用者需要繼承這個類,並重載其initProxyApplication()方法,在其中改變surrounding,如替換ClassLoader等。
(2) DelegateApplication:即應用原有的Application,應用從getApplicationContext()等方法中取到的都是DelegateApplication。注意DelegateApplication只是一個稱謂,並沒有一個叫DelegateApplication的基類存在。
Android的Proxy/Delegate Application架構 (主要介紹外掛程式化開發)