1. 程式人生 > >全面升級Android面試之元件化與外掛化

全面升級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中
看著有點亂,整理出一張圖
這裡寫圖片描述


這樣的好處有

每個模組可以獨立開發編譯執行
開發單個模組時可以共享資源和工具類
可以針對單個模組測試
外掛化

為什麼有外掛化?

有了元件化,為什麼還要用外掛化呢?外掛化開發總的來說有以下幾點好處(不同外掛框架不一樣):

宿主和外掛分開編譯
併發開發
動態更新外掛
按需下載模組
方法數或變數數爆棚
處境

開放出來的外掛化開發框架比較多,他們各自都有自己的優勢和和不足,實現的原理也有差別下面列

開源的外掛化框架

Qihoo360/DroidPlugin
CtripMobile/DynamicAPK
mmin18/AndroidDynamicLoader
singwhatiwanna/dynamic-load-apk
houkx/android-pluginmgr
bunnyblue/ACDD
wequick/Small
……