首先談談咱們理解的Android插件框架有什麼做用,省得你們同咱們交流時不在一個頻道。框架
咱們理解的插件框架有兩個做用:一是「自解耦」,二是「免安裝」。網站
自解耦指的是一個應用本來由一份代碼編譯而成,但願改爲將其中的一些功能單獨編譯,像插件同樣動態插在主應用上。這樣一來但是使主應用體積變小,下載安裝更方便。二來能夠是比較獨立的功能能夠單獨開發調試,甚至單獨更新版本。因此這個「自解耦」的需求並非在Android平臺上出現的,早在PC開發時代就普遍存在了。插件
免安裝指的一個應用本來須要安裝過程才能啓動運行,但願改成無需安裝便可從一個已經安裝運行的App中啓動起來。這一需求的主要目的是提升流量複用的能力。好比在一個用戶量已經很是大的應用中推薦安裝另外一新應用,用戶點擊入口後若是等待下載而後彈出了安裝界面,這就會流失很是多的用戶。由於用戶總會以爲安裝有成本,不那麼願意安裝新應用。即便你有信心用戶一旦安裝了你的應用就會留下來,也極可能會由於這個安裝過程而流失掉。免安裝這個場景實際上是Shadow服務於咱們自身業務時的主要場景。版本控制
「像Web同樣開發App」則是一個咱們後期達成的目標,這大概是「自解耦」和「免安裝」的組合形式。單純的免安裝方式去運行一個本來須要安裝才能運行的App,不可避免的須要用戶等待這個App的安裝包下載到本地才能運行。而咱們知道Web通常是不用這樣的,打開哪一個頁面就去下載哪一個頁面的資源,不用把整個網站都下載到本地才能打開第一個頁面。所以,咱們在業務中也實踐了「自解耦」,將咱們的業務插件拆解成了十幾個插件。由此達到下載一部分啓動一部分的能力。Shadow目前開源的代碼已經支持這一能力了,不過Shadow目前開源的代碼中沒有演示此場景的Sample,咱們會盡快補充上的。調試
自解耦和免安裝還在版本控制上有必定區別,通常自解耦的插件不太可能單獨運行,極可能依賴了宿主程序或者其餘插件。免安裝的App因爲自己就能夠安裝運行,因此一般不存在這種依賴關係。存在依賴關係帶來的問題就是不容易單獨更新。若是對其餘部分(宿主或其餘插件)只有接口層面的依賴,咱們能夠更新插件的實現。若是對其餘部分有實現層面的依賴,通常來講很難單獨更新插件了。接口
因此很是歡迎你們同咱們交流插件框架的使用,在交流時咱們也會先關心你的業務場景是「自解耦」的仍是「免安裝」的,亦或是兩者結合的。由於這關係到一些版本控制、哪部分能更新哪部分不能更新的問題。資源