我的Github:https://github.com/BzCoder
最近準(zhǔn)備對Android項目的組件化改造寫一個系列心得沈跨,同時也對本輪學(xué)習(xí)的一次記錄由捎,會盡量寫的細(xì)一點,也是對知識的鞏固饿凛。
尤其要感謝@JessYan大神的ArmsComponet框架狞玛。
在本章中不談具體代碼邻奠,只談總體思路。歡迎各位在簡書下留言为居。
前言
去年熟悉了一整個SpringBoot碌宴,SpringCloud生態(tài),說實在很多后臺開發(fā)的思想是值得Android開發(fā)借鑒的(AOP蒙畴,IOC贰镣,編程的思想),受益匪淺膳凝。
這段時間公司里提出要將原有APP進(jìn)行組件化改造碑隆,以適應(yīng)之后更加豐富的需求以及代碼的解耦和多app的模塊復(fù)用。其實后臺模塊化開發(fā)已經(jīng)實現(xiàn)了很久蹬音,加上后臺開發(fā)有注冊中心的概念上煤,模塊管理十分靈活。當(dāng)然Android開發(fā)依舊可以借鑒后臺的開發(fā)模式著淆。我作為公司的老安卓劫狠,自然挑起了這個擔(dān)子,加上外包團(tuán)隊永部,一共組成了一個六人的安卓小團(tuán)隊独泞,對APP進(jìn)行組件化重構(gòu)。
本次組件化改造的終極目標(biāo):
- 分離業(yè)務(wù)模塊苔埋,減少不必要的耦合懦砂,方便模塊的拆卸增減。
- 獨(dú)立模塊單獨(dú)編譯组橄,無需每次編譯都全量打包荞膘,方便開發(fā)人員的開發(fā)。
- 通過后臺配置一鍵生成APP(Git + Jenkins持續(xù)集成)玉工。
- 實現(xiàn)同一個項目多應(yīng)用差異化打包羽资。
組件化開發(fā)相比原來的All in One模式,要考慮多方面的問題瓮栗,我主要羅列了以下幾點:
組件化主要需要解決的問題:
- gradle與manifest的管理
- 模塊之間的分層邊界
- 模塊間的通訊與調(diào)用
- 各個模塊的個性化配置
- 各個模塊的生命周期
- 不同模塊的屏幕適配
需要學(xué)習(xí)的第三方框架原理和工具
在接下來的章節(jié)中我們來仔細(xì)分析如何解決這些問題削罩。
項目架構(gòu)
使用的基礎(chǔ)架構(gòu)是基于@JessYan大神的ArmsComponet框架,并在此框架上做出相應(yīng)的優(yōu)化與改造费奸。
總體分層
總體分層基本采用@JessYan的分層方式,大體分為三層进陡。外加CommonService層來統(tǒng)一管理模塊之間調(diào)用愿阐。
宿主層
APP殼文件,最后打包層趾疚,通過統(tǒng)一配置文件(gradle.properties)缨历,決定最后app的包名以蕴,定義主界面樣式風(fēng)格,模塊的最終引入辛孵。
業(yè)務(wù)層
各個實際業(yè)務(wù)丛肮,業(yè)務(wù)層根據(jù)實際邏輯結(jié)構(gòu)繼續(xù)分層,我根據(jù)現(xiàn)有的項目是分了三層魄缚。當(dāng)然我們可以根據(jù)業(yè)務(wù)量級繼續(xù)分層宝与。這個分層主要是為了方便調(diào)試(Application與Library的切換)。在具體實際開發(fā)中冶匹,有時候需要對模塊進(jìn)行單獨(dú)調(diào)整习劫,實際開發(fā)中,甚至有些模塊是互相循環(huán)調(diào)用的嚼隘,我們還需要整體調(diào)試诽里。以下僅供參考,實際情況以開發(fā)為準(zhǔn)飞蛹。
- 第一層:被APP層直接調(diào)用谤狡,較大的模塊,功能較為完整的模塊卧檐。
- 第二層:一般為第一層業(yè)務(wù)模塊跳轉(zhuǎn)的頁面豌汇。
- 第三層:底層頁面,一般為詳情頁泄隔,不會有下一級跳轉(zhuǎn)拒贱。
每個業(yè)務(wù)層一般情況下都使用基礎(chǔ)層提供的基礎(chǔ)組件,但是也允許有相應(yīng)的自己的網(wǎng)絡(luò)請求配置佛嬉,圖片請求框架逻澳,甚至基礎(chǔ)控件框架,以做到模塊的解耦以及從別的APP中遷移過來模塊的加入暖呕。
基礎(chǔ)層
包含了各種基礎(chǔ)服務(wù)斜做,除了簡單的工具類,通用自定義組件湾揽,一般情況都建議以遠(yuǎn)程調(diào)用模式引入瓤逼,基礎(chǔ)層(CommonSDK)不要引入過多的東西,有以下幾個原因:
- 加快工程的編譯速度 库物。
- 減少基礎(chǔ)層的代碼量 霸旗。
- 自定義組件專人維護(hù),責(zé)任到人戚揭,因為總是有一些人覺得自己能優(yōu)化別人寫的庫诱告,于是亂改。民晒。精居。同時有利于開源锄禽,讓更多的人使用才能優(yōu)化組件。
- 有利于在其他工程中快速復(fù)用以及在本地Lib的刪減升級靴姿。
Service層
這個是很關(guān)鍵的一個層沃但,相當(dāng)于Bridge角色。它定義各個模塊接口佛吓,以實現(xiàn)模塊之間的互相調(diào)用宵晚,每個模塊對外暴露的方法,都必須注冊在Service中辈毯。我們盡量保持模塊對外接的輸入?yún)?shù)的最小化坝疼。這樣某一個模塊從V1升級至V2,其他模塊保持對外部接口調(diào)用不變谆沃,我們就可以迅速的對模塊進(jìn)行V1到V2的升級钝凶。做到最大程度的解耦。
資源層
包含了APP的個性資源文件唁影,包括顏色耕陷,字體,圖片資源文件等非共用資源据沈∮茨可以通過CommonRes來引用,以方便不同APP的Res的文件切換锌介。
項目配置
我們將大多數(shù)的項目配置相關(guān)的屬性都轉(zhuǎn)移到gradle.properties文件當(dāng)中嗜诀,以完成對工程的統(tǒng)一管理。其中包含各種廠商Key孔祸,各個模式都是引入的標(biāo)志位隆敢,應(yīng)用的包名,應(yīng)用的版本號崔慧。
那么有關(guān)于Android組件化改造的總體架構(gòu)分塊就先介紹到這里拂蝎,歡迎大家討論。