在開發(fā)應(yīng)用時我們會發(fā)現(xiàn)其實很多功能是相似的,而如果每開發(fā)一個項目都要重新去編寫相關(guān)的代碼的話會很費時間,如果把每個單獨的功能都封裝成一個組件,每個業(yè)務(wù)都封裝成模塊的話就可以有效的提高開發(fā)效率,以及代碼的復(fù)用率。
- 組件:單一的功能組件,如視頻組件,支付組件,路由組件,每個組件都能單獨抽出來制作SDK
- 模塊:獨立的業(yè)務(wù)模塊,如直播模塊,首頁模塊,即時通信模塊,模塊可包含不同的組件。
在搭建新工程時可考慮以下問題。
- 將公用的代碼提取出來放作為基礎(chǔ)庫 Base module
- 將單獨的功能封裝到 Library module 中
- 多 module 劃分業(yè)務(wù)和基礎(chǔ)功能
關(guān)于聚合和解耦
自打入坑面向?qū)ο缶幊虝r聽到最多的一句話就是高內(nèi)低耦合,現(xiàn)在搭建工程也可以用到這個思想。
- Android Studio 通過依賴的方式為每個 module 之間提供了溝通和交流的渠道從而形成聚合。
- 當(dāng)一個模塊和非常多的模塊交流時,如果有一天我們需要換掉這個模塊,移除它和別的模塊的依賴關(guān)系那么后果將是災(zāi)難性的,所以需要通過解耦來找到一個為移除或者替換某個個體的行為付出最少的代價的方案。
聚合和解耦是項目架構(gòu)的基礎(chǔ),設(shè)計模塊時應(yīng)思考以下問題。
- 如何讓每個個體產(chǎn)生最大的作用
- 如何讓個體間的交流通暢
- 如何讓每個個體付出最小的消耗來完成任務(wù),并產(chǎn)生更大的集體利益
- 如何統(tǒng)籌更大的集體利益
如何使用依賴

- Library dependency 可依賴第三方庫(本地或者網(wǎng)絡(luò)的)
- Jar dependency 引入 lib 文件夾中所有 .jar 后綴的文件,還能引用 .aar 后綴的文件。
- Module dependency 庫依賴
下面演示建一個基礎(chǔ)庫并在項目中依賴它

AndroidManifest.xml 文件
- AndroidManifest 是 Android 項目的聲明配置文件,用來聲明配置四大主鍵 Activity、Service、BroadcastReceiver、ContentProvicer ,以及自定義的 Application。
- 每個 module 都有一份配合的 AndroidManifest 文件來記載配置信息。
- 最終生成 App 的時候只有一份 AndroidManifest 來指導(dǎo) App 應(yīng)該如何配置,這是會將每個 module 中的 AndroidManifest 合并成一個。

AndroidManifest 屬性匯總
編譯主 module 時會將這些功能 module 重新編譯,而每個 module 可單獨編譯成一個 aar 文件

使用時直接將編譯好的 aar 文件拷貝到新的工程里就可以直接用了。

參考
- 《Android 組件化架構(gòu)(蒼王)》