Android組件化和插件化開(kāi)發(fā)
組件化開(kāi)發(fā)就是將一個(gè)app分成多個(gè)模塊,每個(gè)模塊都是一個(gè)組件(Module),開(kāi)發(fā)的過(guò)程中我們可以讓這些組件相互依賴或者單獨(dú)調(diào)試部分組件等,但是最終發(fā)布的時(shí)候是將這些組件合并統(tǒng)一成一個(gè)apk,這就是組件化開(kāi)發(fā)。插件化開(kāi)發(fā)和組件化開(kāi)發(fā)略有不用,插件化開(kāi)發(fā)時(shí)將整個(gè)app拆分成很多模塊,這些模塊包括一個(gè)宿主和多個(gè)插件,每個(gè)模塊都是一個(gè)apk(組件化的每個(gè)模塊是個(gè)lib),最終打包的時(shí)候?qū)⑺拗鱝pk和插件apk分開(kāi)或者聯(lián)合打包。
組件化概述android工程的組件一般分為兩種,lib組件和application組件application組件是指該組件本身就可以運(yùn)行并打包成apklib組件是指該組件屬于app的一部分,可以供其它組件使用但是本身不能打包成apk
為什么要有組件化?加入一個(gè)app工程只有一個(gè)組件,隨著app業(yè)務(wù)的壯大模塊越來(lái)越多,代碼量超10萬(wàn)是很正常的,這個(gè)時(shí)候我們會(huì)遇到以下問(wèn)題
稍微改動(dòng)一個(gè)模塊的一點(diǎn)代碼都要編譯整個(gè)工程,耗時(shí)耗力公共資源、業(yè)務(wù)、模塊混在一起耦合度太高不方便測(cè)試組件化正確的姿勢(shì)既然選擇使用組件化,那么如何正確的使用它呢?這里給出一種解決方案,如果你有更好的方案,歡迎交流。我們創(chuàng)建了一個(gè)app工程project,默認(rèn)里面有一個(gè)app組件,這個(gè)app組件是可以直接運(yùn)行的。怎么劃分組件呢?
1.新建一個(gè)lib組件,new Module—>Andorid Library,取名BaseUtilLib,我們將所有的公共的工具類、網(wǎng)絡(luò)分裝等類放在其中2.新建一個(gè)lib組件,BaseReslLib,我們將所有的公共資源、drawable、String等類放在其中3.將app按照自己的規(guī)則劃分成多個(gè)模塊,比如按業(yè)務(wù)按地區(qū)等都可以4.逐一開(kāi)發(fā)某個(gè)模塊,比如Test模塊,新建一個(gè)TestApp組件,TestApp組件引用[1][2]步驟的BaseUtilLib和BaseReslLib,在TestApp組件里添加并引用TestLib組件。在TestLib的activity中寫(xiě)代碼寫(xiě)業(yè)務(wù)邏輯,TestApp只負(fù)責(zé)跳轉(zhuǎn)和測(cè)試5.將工程中的所有類似TestLib組件(不是TestApp組件)引入到工程的app中看著有點(diǎn)亂,整理出一張圖
這樣的好處有
每個(gè)模塊可以獨(dú)立開(kāi)發(fā)編譯運(yùn)行開(kāi)發(fā)單個(gè)模塊時(shí)可以共享資源和工具類可以針對(duì)單個(gè)模塊測(cè)試
demo地址:https://github.com/halibobo/ModuleBuild
插件化為什么有插件化?有了組件化,為什么還要用插件化呢?插件化開(kāi)發(fā)總的來(lái)說(shuō)有以下幾點(diǎn)好處(不同插件框架不一樣):
宿主和插件分開(kāi)編譯并發(fā)開(kāi)發(fā)動(dòng)態(tài)更新插件按需下載模塊方法數(shù)或變量數(shù)爆棚處境開(kāi)放出來(lái)的插件化開(kāi)發(fā)框架比較多,他們各自都有自己的優(yōu)勢(shì)和和不足,實(shí)現(xiàn)的原理也有差別下面列
開(kāi)源的插件化框架Qihoo360/DroidPluginCtripMobile/DynamicAPKmmin18/AndroidDynamicLoadersingwhatiwanna/dynamic-load-apkhoukx/android-pluginmgrbunnyblue/ACDDwequick/Small……目前開(kāi)源的這幾個(gè)框架有宿主和插件分離的也有融合在一起的,每個(gè)框架的詳細(xì)介紹和demo在github里都可以查看到。插件化demo運(yùn)行起來(lái)比較簡(jiǎn)單,但是真正將它用到實(shí)際項(xiàng)目中還是要考慮很多小細(xì)節(jié)的,目前我也正處于研究階段。
相關(guān)文章:
1. IntelliJ IDEA配置Tomcat服務(wù)器的方法2. 如何通過(guò)vscode運(yùn)行調(diào)試javascript代碼3. 《CSS3實(shí)戰(zhàn)》筆記--漸變?cè)O(shè)計(jì)(一)4. python如何寫(xiě)個(gè)俄羅斯方塊5. 如何在jsp界面中插入圖片6. JAVA抽象類及接口使用方法解析7. IntelliJ IDEA安裝插件的方法步驟8. JS數(shù)據(jù)類型判斷的幾種常用方法9. python b站視頻下載的五種版本10. JavaScript設(shè)計(jì)模式之策略模式實(shí)現(xiàn)原理詳解
