先上代碼ModuleDemo
1. 什么是模塊化
將一個APK拆分成多個模塊(組件)進行開發(fā),開發(fā)階段可以獨立測試望众,通用模塊可以重復(fù)使用匪补,開發(fā)完成之后可以將所有模塊(組件)整合為一個完整的APK伞辛。
2. 為什么會出現(xiàn)模塊化
在我門進行項目的開發(fā)過程中,隨著業(yè)務(wù)的不斷增加夯缺、代碼量越來越多蚤氏、具有相同功能或者模塊出現(xiàn)。從而就會導(dǎo)致以下問題的發(fā)生踊兜。
1. 各種業(yè)務(wù)耦合在一起竿滨,不利于后期開發(fā)人員的維護。
2. 一個小小的改動需要全局編譯捏境,而且編譯時間過長于游,浪費時間。
為了解決以上問題垫言,所以就出現(xiàn)了模塊化曙砂。
3. 為什么要使用模塊化
- 模塊化可以模塊解耦、避免模塊耦合骏掀、提升團隊的開發(fā)效率。
- 單獨模塊可以獨立運行柱告、單獨模塊不依賴其他模塊截驮、結(jié)構(gòu)清晰、層次明顯际度、減少維護成本與開發(fā)時間葵袭。
- 每個組件業(yè)務(wù)可以由開發(fā)者自行決定采取MVP/MVC等架構(gòu),而不影響整體項目架構(gòu)乖菱。
- 優(yōu)秀的代碼坡锡、組件可以快速的移植使用。
4. 實際操作
1. 創(chuàng)建版本控制
在我們開發(fā)過程中窒所,可能多個模塊之間會使用到相同的配置例如編譯版本鹉勒,第三方依賴等,這些相同的東西后期如果需要更改吵取,我們可能需要改很多地方禽额,故可以寫一個配置文件。
-
首先創(chuàng)建一個文件皮官,起名叫config.gradle
創(chuàng)建配置文件 -
創(chuàng)建好配置文件之后脯倒,接下來就是如何去寫配置文件。
配置文件的寫法 - 寫好配置文件捺氢,接下來就需要引用配置文件藻丢,因為我們這個配置文件需要整個項目都可以使用,故我們需要在整個項目的gradle中去引用摄乒。如圖在project的gradle中添加下面代碼即可悠反。
apply from: "config.gradle"
- 引用完配置文件之后就是残黑,如何去相應(yīng)的gradle中使用了。紅色框中就是在gradle中的使用方法问慎。
/**
1. rootProject.ext是固定不變的萍摊。
2. android 是之前寫配制文件自己隨便命名的東西 。
3. compileSdkVersion 是數(shù)組中的key如叼。
**/
compileSdkVersion rootProject.ext.android.compileSdkVersion
好了版本控制文件的創(chuàng)建冰木、書寫、引用笼恰、使用踊沸,就已經(jīng)完成了。
2. 動態(tài)切換lib和App模式
上面為什么使用模塊化有提過社证,每個模塊可以獨立運行的逼龟,所以我沒就需要對該模塊進行設(shè)置,用了控制什么時候該模塊是App什么時候該模塊是lib
-
首先我們需要在之前的配置文件(config.gradle)中定義一個變量用來控制該模塊是App還是lib
定義用來控制該模塊是App還是lib的變量 - 在相應(yīng)模塊的gradle中添加下面代碼追葡,用來判斷是APP還是lib
if (rootProject.ext.isApp) {
//當前模塊為app
apply plugin: 'com.android.application'
} else {
//當前模塊為lib
apply plugin: 'com.android.library'
}
3. AndroidManifest的管理
同上腺律,每個app在運行的時候,需要一個默認的啟動頁宜肉,而在lib中則是不需要的匀钧。所以app的AndroidManifest和lib的AndroidManifest是不一樣的,所以我們就需要將lib和app的AndroidManifest分開寫
-
創(chuàng)建AndroidManifest谬返,我們在每個module的main目錄下創(chuàng)建一個文件之斯,這個文件就叫module用來存放App模式下的AndroidManifest,而之前的AndroidManifest則作為lib模式下的AndroidManifest
分別創(chuàng)建app模式下的AndroidManifest和lib模式下的AndroidManifest - 創(chuàng)建好AndroidManifest下來就是使用了遣铝,在相應(yīng)的moudle的gradle添加下面代碼
sourceSets {
main {
if (rootProject.ext.isApp) {
// 這里需要注意manifest.srcFile中的manifest的m為小寫佑刷,大寫M會報錯,下面也是一樣
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
// lib模式下酿炸,去除多余的debug包
java{
exclude 'debug/**'
}
}
}
}
4. 組件之間資源命名沖突
我們知道有的時候瘫絮,在不同的Module下,有可能存在著相同名稱的資源填硕,例如布局文件檀何,顏色,等等廷支,而出現(xiàn)上面的情況频鉴,就會導(dǎo)致我們app中不同module的資源沖突。解決方式就是在相應(yīng)Module的gradle添加下面代碼
resourcePrefix "modulea_"http://modulea_根據(jù)自己的module進行命名
5. 組件之間Activity的跳轉(zhuǎn)恋拍、數(shù)據(jù)傳遞垛孔、Fragment的使用
- Activity的跳轉(zhuǎn)和Fragment的使用我們可以使用第三方框架ARouter,這里我不多說施敢,不會的可以去網(wǎng)上搜怎么使用
- 數(shù)據(jù)傳遞也可以使用EventBus
好了到這里就搭建好一個簡單的模塊化框架了周荐,我這里只是說下怎么搭建模塊化項目狭莱,至于項目中的的目錄結(jié)構(gòu)我沒說多少,不同的人有不同的理解概作,無非就是多加幾個Module腋妙。
最后貼上我自己寫的代碼ModuleDemo