Android組件化開發(fā)

1. 什么是組件化開發(fā)呢?

在項(xiàng)目開發(fā)中,會(huì)將公用的代碼提取出來(lái)制作基礎(chǔ)庫(kù)Base Module,將某些單獨(dú)的功能封裝到Library module中,更具業(yè)務(wù)來(lái)劃分module。
組件:指的是單一的功能組件,如視頻組件(VideoSDK)、支付組件(PaySDK)、路由組件(Router)等,每個(gè)組件都能單獨(dú)抽出來(lái)制作成SDK。
模塊:指的是業(yè)務(wù)模塊(LiveModule)、首頁(yè)模塊(HomeModule)、即時(shí)通信模塊(IMModule)等。模塊相對(duì)于組件來(lái)說(shuō)粒度更大,模塊可能包含多種不同的組件。

1.1 組件化開發(fā)有什么好處?

1)避免重復(fù)造輪子,可以節(jié)省開發(fā)和維護(hù)的成本。
2)可以通過(guò)組件和模塊為業(yè)務(wù)基準(zhǔn)合理地安排人力,提高開發(fā)效率。
3)不同的項(xiàng)目可以公用一個(gè)組件或模塊,確保整體技術(shù)方案的一致性。
4)為未來(lái)插件化共用一套底層模型做準(zhǔn)備。

1.2 模塊化開發(fā)的好處?

1)業(yè)務(wù)模塊解耦,業(yè)務(wù)移植更加簡(jiǎn)單。
2)多團(tuán)隊(duì)根據(jù)業(yè)務(wù)內(nèi)容進(jìn)行并行開發(fā)和測(cè)試。
3)單個(gè)業(yè)務(wù)可以單獨(dú)編譯打包,加快編譯速度。
4)多個(gè)app共用模塊,降低了研發(fā)和維護(hù)的成本。

??組件化和模塊化都是為了代碼重用和業(yè)務(wù)解耦。區(qū)別在于模塊化是業(yè)務(wù)導(dǎo)向,組件化是功能導(dǎo)向。
??項(xiàng)目體積越來(lái)越大后,必定會(huì)有超過(guò)65536的一天,要么選擇multidex的方式分包解決,要么使用插件化的方式來(lái)完成項(xiàng)目。
??組件化和模塊化的劃分可以更好地為項(xiàng)目插件化開路,插件化的模塊化發(fā)布和正常發(fā)布有著非常大的差異,已經(jīng)脫離了組件化和模塊化的構(gòu)建機(jī)制,插件化擁有更高效的業(yè)務(wù)解耦。

1.1.3 基礎(chǔ)組件架構(gòu)介紹

分為應(yīng)用層、組件層和基礎(chǔ)層。
1)基礎(chǔ)層:包含一些基礎(chǔ)庫(kù)和對(duì)基礎(chǔ)庫(kù)的封裝,包括圖片加載、網(wǎng)絡(luò)加載、數(shù)據(jù)存儲(chǔ)等。
2)組件層:包含一些簡(jiǎn)單的業(yè)務(wù),比如登陸、數(shù)據(jù)觀看、圖片瀏覽等。
3)應(yīng)用層用于統(tǒng)籌全部組件,并輸出生成app。

1.2.1 依賴

??Android Studio 獨(dú)有設(shè)計(jì)—— module依賴。
??module 的依賴包括對(duì)第三方庫(kù)的依賴,也包含對(duì)其他module的依賴。通過(guò)依賴我們可以訪問(wèn)第三方和其他被依賴Module的代碼和資源。
三種基本的依賴方式:
1)Jar dependency:通過(guò)Gradle配置引入lib文件夾中的所有.jar后綴的文件,還能引用.aar后綴的文件。
2)Base module:相當(dāng)于一個(gè)基礎(chǔ)模塊庫(kù)(lib module)來(lái)作為依賴,對(duì)應(yīng)的是module dependency,實(shí)質(zhì)上是將其打包成aar文件,方便其他庫(kù)進(jìn)行依賴。
3)第三方依賴通過(guò)library dependency 完成倉(cāng)庫(kù)索引依賴,這里的倉(cāng)庫(kù)可以配置為網(wǎng)絡(luò)庫(kù)和本地庫(kù)。

1.2.2 聚合和解耦合

依賴 -> 關(guān)系

??有了依賴才能產(chǎn)生關(guān)系。一個(gè)工程體系我們可以想象成一個(gè)群體,如果一個(gè)群體中的每個(gè)個(gè)體彼此都非常陌生,沒(méi)有溝通,沒(méi)有關(guān)系,那么將無(wú)法發(fā)揮每個(gè)個(gè)體的最大能力,所以我們需要為個(gè)體提供溝通交流的渠道。

??我們?cè)趯?shí)踐中也應(yīng)當(dāng)為替換或移除某個(gè)個(gè)體的行為付出最少代價(jià)的方案。

關(guān)系 -> 解耦

??既然需要解耦,需要設(shè)計(jì)更加適合交流溝通的系統(tǒng),也可以考慮為一個(gè)群體設(shè)計(jì)更加適合的交流溝通的方式。
??聚合和解耦是項(xiàng)目架構(gòu)的基礎(chǔ)。架構(gòu)工程就是一個(gè)群體集合,如何讓每個(gè)個(gè)體產(chǎn)生最大的作用;如何讓個(gè)體間的交流通暢來(lái)如何讓每個(gè)個(gè)體付出最小的消耗來(lái)完成任務(wù),并獲得最大的集體利益;如何統(tǒng)籌更大規(guī)模的集體。

1.3 重新認(rèn)識(shí) AndroidManifest

??由于每個(gè)工程都會(huì)接觸到AndroidManifest.xml項(xiàng)目配置文件,說(shuō)明了其重要性。每個(gè)module都有一份配合的AndroidManifest文件來(lái)記載其信息,最終生成一個(gè)APP的時(shí)候,如何記錄多個(gè)module獨(dú)立的配置信息呢?答案就是將多個(gè)AndroidManifest合成一個(gè),那么沖突將如何解決呢?
??首先,Application module(主工程)依賴多個(gè)lib module(功能module)如下:

dependencies {
      compile project(':news')
      compile project(':web')
      compile project(':submit')
      annotationProcessor 'com.alibaba:arouter-compiler:1.1.1'
}

??當(dāng)編譯主module時(shí)會(huì)將這些功能module重新編譯,然后將成果(aar)放到主module的intermidates文件夾中

。。。待續(xù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Android組件化開發(fā) 在Android項(xiàng)目組件化之前,我們的項(xiàng)目都是像下圖那樣,一個(gè)單一工程下,根據(jù)不同...
    CHSmile閱讀 4,696評(píng)論 1 34
  • 插件化與組件化 插件化就是將一個(gè)app分為一個(gè)宿主和多個(gè)模塊(插件),宿主是被真正安裝到設(shè)備的apk,負(fù)責(zé)加載插件...
    CYRUS_STUDIO閱讀 4,237評(píng)論 3 19
  • 年年歲歲,歲歲年年。掩面長(zhǎng)思,我們都經(jīng)歷了些什么? 年關(guān),關(guān),許慎《說(shuō)文》以木橫持門戶也。年關(guān),消費(fèi)是要猛增的;欠...
    遠(yuǎn)拓閱讀 350評(píng)論 2 2
  • 本周重點(diǎn)工作: (1)本周共舉辦活動(dòng)14場(chǎng);2場(chǎng)島下島下草莓采摘活動(dòng),6場(chǎng)老友記采摘活動(dòng),4場(chǎng)展廳活動(dòng),2場(chǎng)線下平...
    安小妮anni閱讀 214評(píng)論 0 0
  • 《羋月傳》風(fēng)風(fēng)火火地?zé)岵ブ?,不管是穿幫也好,露怯也罷,總歸這一波演員是又火了,在這當(dāng)口,陳紫函半年前的一條微博引起...
    Hk迪帥閱讀 1,236評(píng)論 0 2

友情鏈接更多精彩內(nèi)容