基于 MVP 的 Android 組件化開發(fā)框架實踐

一清寇、背景

當我們的項目變得越來越大喘漏,代碼變得越來越臃腫,耦合會越來越多华烟,編譯速度越來越慢翩迈,開發(fā)效率也會變得越來越低,怎么辦盔夜?這個時候我們就需要對舊項目進行重構(gòu)负饲,即是模塊的拆分,官方的說法就是組件化喂链。

二返十、簡介

那什么是組件化呢?其基本理念是:把常用的功能椭微、控件洞坑、基礎(chǔ)類、第三方庫蝇率、權(quán)限等公共部分抽離封裝迟杂,我們稱之為基礎(chǔ)組件(baselibs);把業(yè)務分成 N 個模塊進行獨立的管理本慕,每一個模塊我們稱之為業(yè)務組件排拷;而所有的業(yè)務組件都需要依賴于封裝的基礎(chǔ)組件,業(yè)務組件之間不做依賴间狂,這樣的目的是為了讓每一個業(yè)務模塊都能單獨運行攻泼。而在 APP 層對整個項目的模塊進行封裝。

業(yè)務模塊之間的跳轉(zhuǎn)可以通過路由(Arouter)實現(xiàn);業(yè)務模塊之間的通信可以通過消息(EventBus)來實現(xiàn)忙菠。

三何鸡、基礎(chǔ)搭建

1、組件框架圖

image.png

2牛欢、根據(jù)組件框架圖搭建的項目結(jié)構(gòu)圖

image.png

3骡男、接下來介紹每個模塊

項目中總共有五個 module ,包括 3 個業(yè)務模塊傍睹、一個基礎(chǔ)模塊和一個 APP 殼模塊隔盛。

在建好項目之后我們需要給 3 個 module 配置 “集成開發(fā)模式” 和 “組件開發(fā)模式” 的切換開關(guān),可以在 gradle.properties 文件中定義變量 isModel 拾稳,isModel=false 代表是 “集成開發(fā)模式” , isModel=true 代表是 “組件開發(fā)模式” (注:每次修改isModel的值后一定要Sysn才會生效)吮炕。

在這里插入圖片描述

APP 殼模塊

主要就是集成每一個模塊,最終打包成一個完整的 apk 访得,其中 gradle 做了如下配置龙亲,根據(jù)配置文件中的 isModel 字段來依賴不同的業(yè)務組件

image.png

baselibs 模塊

主要負責封裝公共部分,如 MVP 架構(gòu)悍抑、 BaseView 的封裝鳄炉、網(wǎng)絡(luò)請求庫、圖片加載庫搜骡、工具類以及自定義控件等拂盯;

為了防止重復依賴,所有的第三方庫都放在這個模塊记靡,業(yè)務模塊不做任何第三方依賴谈竿,只依賴于 baselibs 模塊。
baselibs 模塊的結(jié)構(gòu)如下:

image.png

baselibs 模塊的 gradle 中引入的庫

image.png

業(yè)務模塊(module_news摸吠、module_video榕订、module_me)

每一個業(yè)務模塊在 “集成開發(fā)模式” 下以 library 的形式存在;在 “組件開發(fā)模式” 下以 application 的形式存在蜕便,可以單獨運行劫恒。

由于每個業(yè)務模塊的配置文件都差不多,下面就以 module_news 模塊為例轿腺;

以下是 module_news 模塊的 gradle 配置文件:

image.png

配置文件 config.gradle 两嘴,對項目中的第三庫、 app 的版本等配置

image.png

image.png
image.png

最后別忘記在工程的中 build.gradle 引入該配置文件

在這里插入圖片描述

四族壳、業(yè)務模塊之間交互

業(yè)務模塊之間的跳轉(zhuǎn)可以通過路由(Arouter)實現(xiàn)憔辫;業(yè)務模塊之間的通信可以通過消息(EventBus)來實現(xiàn)。

Arouter 實現(xiàn)業(yè)務模塊之間的跳轉(zhuǎn)

我們在之前已經(jīng)依賴了 Arouter 用它來實現(xiàn)跳轉(zhuǎn)只需要以下兩步:

第一步

  • gradle 配置


    image.png

第二步

  • 需要指明目標頁面以及要帶的參數(shù)仿荆,然后在調(diào)用 navigation() 方法贰您;

    在這里插入圖片描述

    第三步
    image.png

  • 首先在 onCreate 方法調(diào)用 ARouter.getInstance().inject(this) 注入坏平;

  • 然后要用 @Route 注解標注頁面,并在 path 變量中給頁面定義一個路徑锦亦;

  • 然后要用 @Route 注解標注頁面舶替,并在 path 變量中給頁面定義一個路徑;

EventBus 實現(xiàn)業(yè)務模塊之間的通訊

利用第三方如 EventBus 對消息進行管理杠园。在 baselibs 組件中的 BaseActivity 顾瞪、 BaseFragment 類做了對消息的簡單封裝,子類只需要重寫 useEventBus() 返回 true 即可對事件的注冊抛蚁。

五陈醒、搭建過程中遇到的問題

1、AndroidManifest
我們知道 APP 在打包的時候最后會把所有的 AndroidManifest 進行合并瞧甩,所以每個業(yè)務組件的 Activity 只需要在各自的模塊中注冊即可钉跷。

如果業(yè)務組件要單獨運行,則需要單獨的一個 AndroidManifest 肚逸,在 gradle 的 sourceSets 加載不同的 AndroidManifest 即可尘应。


image.png

gradle 配置

image.png

注意:集成模式下的 AndroidManifest 不需要配置 Application ,組件模式下的 AndroidManifest 需要單獨配置 Application 吼虎,并且必須繼承 BaseApp 。
2苍鲜、資源文件沖突的問題
不同業(yè)務組件里的資源文件的名稱可能相同思灰,所以就可能出現(xiàn)資源文件沖突的問題,我們可以通過設(shè)置資源的前綴來防止資源文件的沖突混滔。

在這里插入圖片描述

gradle 配置洒疚,以 module_news 模塊為例

在這里插入圖片描述

這樣配置以后,如果我們在命名資源文件沒有加前綴的時候坯屿,編譯器就會提示我們沒加前綴油湖。

至此, Android 基本組件化框架已經(jīng)搭建完成领跛,如有錯誤之處還請指正乏德。

喜歡請點擊+關(guān)注哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吠昭,隨后出現(xiàn)的幾起案子喊括,更是在濱河造成了極大的恐慌,老刑警劉巖矢棚,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郑什,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒲肋,警方通過查閱死者的電腦和手機蘑拯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門钝满,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人申窘,你說我怎么就攤上這事弯蚜。” “怎么了偶洋?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵熟吏,是天一觀的道長。 經(jīng)常有香客問我玄窝,道長牵寺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任恩脂,我火速辦了婚禮帽氓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俩块。我一直安慰自己黎休,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布玉凯。 她就那樣靜靜地躺著势腮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漫仆。 梳的紋絲不亂的頭發(fā)上捎拯,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音盲厌,去河邊找鬼署照。 笑死,一個胖子當著我的面吹牛吗浩,可吹牛的內(nèi)容都是我干的建芙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼懂扼,長吁一口氣:“原來是場噩夢啊……” “哼禁荸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阀湿,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屡限,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炕倘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钧大,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年罩旋,在試婚紗的時候發(fā)現(xiàn)自己被綠了啊央。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眶诈。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瓜饥,靈堂內(nèi)的尸體忽然破棺而出逝撬,到底是詐尸還是另有隱情,我是刑警寧澤乓土,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布宪潮,位于F島的核電站,受9級特大地震影響趣苏,放射性物質(zhì)發(fā)生泄漏狡相。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一食磕、第九天 我趴在偏房一處隱蔽的房頂上張望尽棕。 院中可真熱鬧,春花似錦彬伦、人聲如沸滔悉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽回官。三九已至,卻和暖如春搂橙,著一層夾襖步出監(jiān)牢的瞬間歉提,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工份氧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弯屈。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓蜗帜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親资厉。 傳聞我的和親對象是個殘疾皇子厅缺,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

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