Android組件化和插件化開發
什么是組件化和插件化?
組件化開發就是將一個app分成多個模塊,每個模塊都是一個組件(Module),開發的過程中我們可以讓這些組件相互依賴或者單獨調試部分組件等,但是最終發布的時候是將這些組件合並統一成一個apk,這就是組件化開發。
插件化開發和組件化開發略有不用,插件化開發時將整個app拆分成很多模塊,這些模塊包括一個宿主和多個插件,每個模塊都是一個apk(組件化的每個模塊是個lib),最終打包的時候將宿主apk和插件apk分開或者聯合打包。
組件化
概述
android工程的組件一般分為兩種,lib組件和application組件
application組件是指該組件本身就可以運行並打包成apk
lib組件是指該組件屬於app的一部分,可以供其它組件使用但是本身不能打包成apk
為什么要有組件化?
加入一個app工程只有一個組件,隨着app業務的壯大模塊越來越多,代碼量超10萬是很正常的,這個時候我們會遇到以下問題
- 稍微改動一個模塊的一點代碼都要編譯整個工程,耗時耗力
- 公共資源、業務、模塊混在一起耦合度太高
- 不方便測試
組件化正確的姿勢
既然選擇使用組件化,那么如何正確的使用它呢?這里給出一種解決方案,如果你有更好的方案,歡迎交流。
我們創建了一個app工程project,默認里面有一個app組件,這個app組件是可以直接運行的。
怎么划分組件呢?
- 1.新建一個lib組件,new Module—>Andorid Library,取名BaseUtilLib,我們將所有的公共的工具類、網絡分裝等類放在其中
- 2.新建一個lib組件,BaseReslLib,我們將所有的公共資源、drawable、String等類放在其中
- 3.將app按照自己的規則划分成多個模塊,比如按業務按地區等都可以
- 4.逐一開發某個模塊,比如Test模塊,新建一個TestApp組件,TestApp組件引用[1][2]步驟的BaseUtilLib和BaseReslLib,在TestApp組件里添加並引用TestLib組件。在TestLib的activity中寫代碼寫業務邏輯,TestApp只負責跳轉和測試
- 5.將工程中的所有類似TestLib組件(不是TestApp組件)引入到工程的app中
看着有點亂,整理出一張圖
這樣的好處有
每個模塊可以獨立開發編譯運行
開發單個模塊時可以共享資源和工具類
可以針對單個模塊測試
demo地址:https://github.com/halibobo/ModuleBuild
插件化
為什么有插件化?
有了組件化,為什么還要用插件化呢?插件化開發總的來說有以下幾點好處(不同插件框架不一樣):
- 宿主和插件分開編譯
- 並發開發
- 動態更新插件
- 按需下載模塊
- 方法數或變量數爆棚
處境
開放出來的插件化開發框架比較多,他們各自都有自己的優勢和和不足,實現的原理也有差別下面列
開源的插件化框架
- Qihoo360/DroidPlugin
- CtripMobile/DynamicAPK
- mmin18/AndroidDynamicLoader
- singwhatiwanna/dynamic-load-apk
- houkx/android-pluginmgr
- bunnyblue/ACDD
- wequick/Small
- ……
目前開源的這幾個框架有宿主和插件分離的也有融合在一起的,每個框架的詳細介紹和demo在github里都可以查看到。插件化demo運行起來比較簡單,但是真正將它用到實際項目中還是要考慮很多小細節的,目前我也正處於研究階段。
轉自:大黑