1.Dynamic-Load-Apk
?Dynamic-Load-Apk是由android大神任玉剛主導(dǎo)開發(fā)的插件框架,大家有可能閱讀過他寫的一本非常有名的書《Android開發(fā)藝術(shù)探索》。它是一個比較老的插件化框架,
但是目前已經(jīng)很長時間沒有更新了,途牛用的就是這個插件化框架。Dynamic-Load-Apk是很早的插件化框架,并且?guī)в星秩胄?,?yōu)缺點(diǎn)如下:
優(yōu)點(diǎn):
? 1.插件不依賴宿主,對宿主開發(fā)者透明,提供三種依賴方式;
? 2.宿主和插件可以頻繁交互,啟動時間短;
缺點(diǎn):
? 1.插件apk必須實(shí)現(xiàn)DLBasePluginActivity,屬于侵入式的,以及不支持service;
? 2.宿主調(diào)用插件和插件內(nèi)部的相互調(diào)用都要使用DL提供的方法,而不能使用Android原生的api,例如:啟動Activity;
? 3.插件開發(fā)有一套規(guī)定,因此造成插件開發(fā)門檻高,學(xué)習(xí)成本高;
2.DroidPlugin
DroidPlugin是由360手機(jī)助手團(tuán)隊(duì)在16年開源的插件框架,已經(jīng)在360手機(jī)助手上使用,它可以在無需安裝、修改的情況下運(yùn)行APK文件,此機(jī)制對改進(jìn)大型APP的架構(gòu)。
實(shí)現(xiàn)多團(tuán)隊(duì)協(xié)作開發(fā)具有一定的好處,其實(shí)VirtualAPK等開發(fā)框架一樣具有這樣的優(yōu)勢,由于360團(tuán)隊(duì)在后期推出了RePlugin這套新的插件框架,所以目前這套插件框架被RePlugin取代,
優(yōu)缺點(diǎn)如下:
優(yōu)點(diǎn):
1.宿主和插件完全隔離,插件不依賴宿主,可以獨(dú)立安裝運(yùn)行;
2.低入侵設(shè)計,插件不需要繼承任何類;
3.插件apk和普通apk一樣的,所以插件開發(fā)沒有門檻,開發(fā)的時候集成簡單;
缺點(diǎn):
1.插件啟動速度比較慢;
2.無法在插件中發(fā)送具有自定義資源的Notification;
3.無法在插件中注冊一些具有特殊Intent Filter的Service、Activity、BroadcastReceiver、ContentProvider等組件以供Android系統(tǒng)、已經(jīng)安裝的其他APP調(diào)用;
4.缺乏對Native層的Hook,對某些帶native代碼的apk支持不好,可能無法運(yùn)行;
3.VirtualApk
VirtualAPK是滴滴出行自研的一款優(yōu)秀的插件化框架,是該團(tuán)隊(duì)在17年6月3號開源的,該框架通過將業(yè)務(wù)模塊插件化,可隨時更新插件來發(fā)布新功能,具備版本隨時發(fā)布的能力。
VirtualAPK對插件沒有額外的約束,原生的apk即可作為插件。插件工程編譯生成apk后,即可通過宿主App加載,每個插件apk被加載后,都會在宿主中創(chuàng)建一個單獨(dú)的LoadedPlugin對象。
通過這些LoadedPlugin對象,VirtualAPK就可以管理插件并賦予插件新的意義,使其可以像手機(jī)中安裝過的App一樣運(yùn)行,優(yōu)缺點(diǎn)如下:
優(yōu)點(diǎn):
1.支持幾乎所有的Android特性,四大組件均不需要在宿主manifest中預(yù)注冊,每個組件都有完整的生命周期;
2.Native層的Hook,插件中的so庫能夠正常使用;
3.兼容市面上幾乎所有的Android手機(jī),這一點(diǎn)已經(jīng)在滴滴出行客戶端中得到驗(yàn)證;
4.入侵極低,插件開發(fā)等同于原生開發(fā);
5.插件的構(gòu)建過程簡單,通過Gradle插件來完成插件的構(gòu)建,整個過程對開發(fā)者透明;
缺點(diǎn):
1.需要在插件中聲明使用插件的宿主,所以在一定程度上影響了插件的獨(dú)立性;
2.對資源、application和context,插件和宿主的共享存在各種問題;
4.RePlugin
RePlugin是360安全衛(wèi)士團(tuán)隊(duì),在17年開源的插件框架,據(jù)17年360安全衛(wèi)士團(tuán)隊(duì)介紹,他們的安卓客戶端83%的功能都實(shí)現(xiàn)了插件化,并且成功的為2億用戶提供了服務(wù),17年全年他們發(fā)布達(dá)
將近600次,平均一天2次的發(fā)版,也是完全得力于這套插件框架,目標(biāo)這套框架還在持續(xù)的更新中,優(yōu)缺點(diǎn)如下:
優(yōu)點(diǎn):
1.支持幾乎所有的Android特性,四大組件均不需要在宿主manifest中預(yù)注冊,支持幾乎所有單品app可以利用到的特性如AppCompat,databing等等;
2.及其穩(wěn)定:hook點(diǎn)僅有一處(classLoader),崩潰率低于萬分之一,很好的兼容了市面上的android rom;
3.擁有成熟的插件管理方案,支持插件的升級,安裝,版本迭代,進(jìn)程間通信,協(xié)議版本等等;
4.入侵極低,插件開發(fā)等同于原生開發(fā);
5.集成相對來說比較簡單;
缺點(diǎn):
1.對資源、application和context,插件和宿主的共享存在各種問題;
5.總結(jié)
由于自己還沒有系統(tǒng)的調(diào)研各個插件框架,所以上面的每個插件框架的優(yōu)缺點(diǎn),其實(shí)都是在網(wǎng)上查資料整理的。對于選擇哪種插件框架,我覺得后期會選擇RePlugin這個框架,原因如下:1.從github上面
代碼的更新速度來看,360團(tuán)隊(duì)一直在很好的維護(hù)這個項(xiàng)目;2.相對于VirtualAPK,RePlugin集成更加簡單,插件的開發(fā)也更加的獨(dú)立, 對android系統(tǒng)特性的支持也更加好。而且我傾向于下載github上
Replugin的源碼做第二次開發(fā),因?yàn)?,每個公司都可能會涉及一些定制的開發(fā)或者針對于插件的統(tǒng)計需求,我們直接在開源代碼的基礎(chǔ)上做二次開發(fā),可以為我們的移動端框架帶來更多的可能性。