本篇是學習插件化的第一篇,無技術(shù)干貨,純扯淡向。主要內(nèi)容是對于市面上插件化框架的簡單分析和建立起對于插件化的最基礎(chǔ)的認識。
??為什么要使用插件化?在開發(fā)中,一個項目只會越做越大。初始版本可能是單一功能,后續(xù)可能加上各種風馬牛不相及的功能。所以我認為插件化可以使得業(yè)務(wù)分離的更徹底,一人負責哪幾個模塊,問題也能快速定位。但是也會帶來問題:插件和插件之間的交互的復雜性更高、底層支持庫因為多個插件需要使用相同的代碼可能會變得很大。所以插件化看似解耦了程序員的職責,實際上對于代碼質(zhì)量的要求更高。
??實現(xiàn)插件化,最快的方法就是找一個第三方框架。現(xiàn)在網(wǎng)上有很多實現(xiàn),其中不乏各大廠正式投入生產(chǎn)環(huán)境使用的、經(jīng)歷了市場考驗的框架,下面我做一個匯總(按github的star數(shù)量排名):
| 名稱 | 來源 | github |
|---|---|---|
| react-native | react-native | |
| DroidPlugin | 奇虎360 | DroidPlugin |
| atlas | 阿里巴巴手機淘寶 | atlas |
| DL | 任玉剛等 | dynamic-load-apk |
| Small | 開源組織Wequick | Small |
| DynamicAPK | 攜程 | DynamicAPK |
| VirtualAPK | 嘀嘀 | VirtualAPK |
| RePlugin | 奇虎360 | RePlugin |
| PluginManager | 個人開發(fā)者houkx | android-pluginmgr |
| Android Dynamic Loader | 個人開發(fā)者mmin18 | AndroidDynamicLoader |
表中的第一個react-native是最后加上去的,因為我一直在糾結(jié)要不要加上這個。它跟其他幾個有些不同,不僅僅是因為它的star數(shù)量比剩下全部加起來都要多,它實際上是app的一種新的書寫方式,使用Node.js使得3端(android\IOS\WEB)代碼合一,把它加入到這個表里有些牽強,因為說它是插件化太牽強,就像說會飛的動物里有超人一樣。這個框架很適合三端并行開發(fā)的項目,但不適合我,因為我既沒有三端并行開發(fā)的項目,也不會JS。
??DroidPlugin是360的張勇開源的,一牛人。大概是15年后半年被用在了360手機助手上,直到后來才被RePlugin取代,因為它的缺點很明顯,就是不可以發(fā)自定義資源的Notification和注冊一些具有特殊Intent Filter的組件。RePlugin是我寫這篇文章之前沒幾天才開源的,開源前造勢很厲害,所以有很多人關(guān)注,目前是7月3號凌晨,它的star和fork分別是1770和237,剛刷新一下又漲了20幾個star。目前360移動端三大主力產(chǎn)品:安全衛(wèi)士、瀏覽器和手機助手全部使用的是這個框架。github上README介紹很全,也很吊,360的文案和公關(guān)值得全中國的互聯(lián)網(wǎng)公司學習。
??atlas是阿里的手淘團隊在今年3月份開源的,當時也是風頭無兩,3個月的時間star近五千。我認為它的亮點在于快,不僅僅是運行的流暢,更多的是在于開發(fā)時修改插件可以動態(tài)更新以及插件自動懶加載,使得調(diào)試app的時間大幅度降低。而它的局限性在于兼容最低的版本是4.x,對于一些還在苦苦兼容2.3的開發(fā)者是一個壞消息。
??DL這個框架應該說是任玉剛發(fā)起的項目。這位也是一牛人,先前在百度安全衛(wèi)士后來去了嘀嘀,也是《Android開發(fā)藝術(shù)探索》的作者。這個框架在14年上半年就開源了,出名很早,但是好像作者不再維護了。從提交記錄上看15年年中之后就沒有再更新代碼了,不過前幾天又換了個logo、寫了寫README。是不是要重新開始維護不得而知。VirtualAPK的編寫應該也是以這位為主力,它也是在前幾天才發(fā)布,幾乎和RePlugin同時,比RePlugin的star還要高幾百。它好像是唯一一個在動態(tài)更新時不需要在Manifest中手動注冊組件的一個框架。嘀嘀出行就是用的這個。
??Small是wequick發(fā)布和維護的,好像是目前國內(nèi)最大的非商業(yè)組織出品的插件化框架。較大的使用案例是酷狗音樂。我第一個學習的就是這個。非常輕量級,使用也非常簡單。但是缺點是在啟動宿主時全部的插件都會被加載。
??DynamicAPK是攜程無線在15年10月份開源的,但是從發(fā)布到最后一次更新,僅僅維護了1個月,也就是有近兩年沒有再更新。
??PluginManager和AndroidDynamicLoader分別也有1年多和2年多不再更新了,看來個人開源確實難做啊...
??客觀的說,目前使用插件化的框架基本上還是要從RePlugin、atlas、VirtualAPK、Small里選一個。這幾個比較新,也一直在維護。以后有時間慢慢去分析它們幾個的實現(xiàn)的區(qū)別以及使用的感受吧。目前我只用過small...
??感覺今年各大廠對于插件化都非常熱情,看來以后插件化和熱更新將是一個趨勢。Hybrid和react-native也是趨勢。我們這種開發(fā)者要學習的東西太多了啊...一不小心就被時代落下了這么多。
??期待騰訊的插件化控件,前幾天看的一篇關(guān)于微信重構(gòu)的文章,相當棒
點這里看,很多經(jīng)驗之談,簡直字字珠璣!