手把手教你擼一個簡單的模塊化框架項目

先上代碼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. 為什么要使用模塊化

  1. 模塊化可以模塊解耦、避免模塊耦合骏掀、提升團隊的開發(fā)效率。
  2. 單獨模塊可以獨立運行柱告、單獨模塊不依賴其他模塊截驮、結(jié)構(gòu)清晰、層次明顯际度、減少維護成本與開發(fā)時間葵袭。
  3. 每個組件業(yè)務(wù)可以由開發(fā)者自行決定采取MVP/MVC等架構(gòu),而不影響整體項目架構(gòu)乖菱。
  4. 優(yōu)秀的代碼坡锡、組件可以快速的移植使用。

4. 實際操作

1. 創(chuàng)建版本控制

在我們開發(fā)過程中窒所,可能多個模塊之間會使用到相同的配置例如編譯版本鹉勒,第三方依賴等,這些相同的東西后期如果需要更改吵取,我們可能需要改很多地方禽额,故可以寫一個配置文件。

  1. 首先創(chuàng)建一個文件皮官,起名叫config.gradle


    創(chuàng)建配置文件
  2. 創(chuàng)建好配置文件之后脯倒,接下來就是如何去寫配置文件。


    配置文件的寫法
  3. 寫好配置文件捺氢,接下來就需要引用配置文件藻丢,因為我們這個配置文件需要整個項目都可以使用,故我們需要在整個項目的gradle中去引用摄乒。如圖在project的gradle中添加下面代碼即可悠反。
apply from: "config.gradle"
配置文件引用
  1. 引用完配置文件之后就是残黑,如何去相應(yīng)的gradle中使用了。紅色框中就是在gradle中的使用方法问慎。
/**
    1. rootProject.ext是固定不變的萍摊。
    2. android 是之前寫配制文件自己隨便命名的東西 。
    3. compileSdkVersion 是數(shù)組中的key如叼。
**/
compileSdkVersion rootProject.ext.android.compileSdkVersion
在相應(yīng)的gradle中使用配置文件

好了版本控制文件的創(chuàng)建冰木、書寫、引用笼恰、使用踊沸,就已經(jīng)完成了。

2. 動態(tài)切換lib和App模式

上面為什么使用模塊化有提過社证,每個模塊可以獨立運行的逼龟,所以我沒就需要對該模塊進行設(shè)置,用了控制什么時候該模塊是App什么時候該模塊是lib

  1. 首先我們需要在之前的配置文件(config.gradle)中定義一個變量用來控制該模塊是App還是lib


    定義用來控制該模塊是App還是lib的變量
  2. 在相應(yīng)模塊的gradle中添加下面代碼追葡,用來判斷是APP還是lib
if (rootProject.ext.isApp) {
    //當前模塊為app
    apply plugin: 'com.android.application'
} else {
    //當前模塊為lib
    apply plugin: 'com.android.library'
}
用來判斷當前模塊是APP還是lib
3. AndroidManifest的管理

同上腺律,每個app在運行的時候,需要一個默認的啟動頁宜肉,而在lib中則是不需要的匀钧。所以app的AndroidManifest和lib的AndroidManifest是不一樣的,所以我們就需要將lib和app的AndroidManifest分開寫

  1. 創(chuàng)建AndroidManifest谬返,我們在每個module的main目錄下創(chuàng)建一個文件之斯,這個文件就叫module用來存放App模式下的AndroidManifest,而之前的AndroidManifest則作為lib模式下的AndroidManifest


    分別創(chuàng)建app模式下的AndroidManifest和lib模式下的AndroidManifest
  2. 創(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/**'
               }

            }
        }
    }
配置AndroidManifest
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的使用
  1. Activity的跳轉(zhuǎn)和Fragment的使用我們可以使用第三方框架ARouter,這里我不多說施敢,不會的可以去網(wǎng)上搜怎么使用
  2. 數(shù)據(jù)傳遞也可以使用EventBus

好了到這里就搭建好一個簡單的模塊化框架了周荐,我這里只是說下怎么搭建模塊化項目狭莱,至于項目中的的目錄結(jié)構(gòu)我沒說多少,不同的人有不同的理解概作,無非就是多加幾個Module腋妙。
最后貼上我自己寫的代碼ModuleDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市讯榕,隨后出現(xiàn)的幾起案子骤素,更是在濱河造成了極大的恐慌,老刑警劉巖愚屁,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件济竹,死亡現(xiàn)場離奇詭異,居然都是意外死亡霎槐,警方通過查閱死者的電腦和手機送浊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丘跌,“玉大人袭景,你說我怎么就攤上這事”帐鳎” “怎么了耸棒?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔼啦。 經(jīng)常有香客問我,道長仰猖,這世上最難降的妖魔是什么捏肢? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮饥侵,結(jié)果婚禮上鸵赫,老公的妹妹穿的比我還像新娘。我一直安慰自己躏升,他們只是感情好辩棒,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膨疏,像睡著了一般一睁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佃却,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天者吁,我揣著相機與錄音,去河邊找鬼饲帅。 笑死复凳,一個胖子當著我的面吹牛瘤泪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播育八,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼对途,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了髓棋?” 一聲冷哼從身側(cè)響起实檀,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仲锄,沒想到半個月后劲妙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡儒喊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年镣奋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀愧。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侨颈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芯义,到底是詐尸還是另有隱情哈垢,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布扛拨,位于F島的核電站耘分,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绑警。R本人自食惡果不足惜求泰,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望计盒。 院中可真熱鬧渴频,春花似錦、人聲如沸北启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咕村。三九已至场钉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懈涛,已是汗流浹背惹悄。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肩钠,地道東北人泣港。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓暂殖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親当纱。 傳聞我的和親對象是個殘疾皇子呛每,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容