什么是組件化庐橙?相信這樣的名詞我們的耳熟能詳了。我也看過很多第三方的開源組件化思路怯伊,但是通常想自己實(shí)現(xiàn)的話琳轿,總會遇到各種各樣的問題。
所以接下來我盡量完整的把我是實(shí)現(xiàn)的一個思路寫在這個文章中耿芹。
1.文章標(biāo)題中崭篡,我們明確的說明是基于Arouter實(shí)現(xiàn)的,所以我們肯定是離不開ARouter這個框架的吧秕。
吐槽一下:由于個人表達(dá)能力有限琉闪,接連兩次。所以表達(dá)能力和準(zhǔn)備真的很重要砸彬,自信過頭了颠毙,可能連個小問題都會被懵了。
不催水了砂碉,進(jìn)入主題蛀蜜。
上篇文章
1.首先組件化肯定是多個module,并且是分工明確的
從上圖中可以看到一個app增蹭,兩個module滴某,兩個lib。
這是項(xiàng)目基本結(jié)構(gòu)。
2.組件化嘛肯定就遇到配置依賴的問題霎奢,所以得有一個公共的build.gradle
1.從上面圖片的可以看到這個config.gradle也就是我們的一個公共配置類户誓。
這個類的用途想必不用多說。但是這里還是提一下:
為了每個組件統(tǒng)一依賴和版本號問題幕侠。這樣子的好處是什么帝美,想必處理過依賴沖突的小伙伴都會有深刻的記憶(這里就不多bb)。
2.最后提醒一下橙依,如果看我文章寫的別忘了引入配置config.gradle.
3.由于為了方便管理每個moudle配置。
從上面的圖中硕旗,我們可以看到module.build.gradle中的一些配置:
1.第一個文件中畫框的地方就不多說了窗骑,這個Arouter路由的配置
2.第二個畫框的位置可以看到,我們配置每個module都依賴于base和arouterCompiler漆枚。arouterCompiler是為了arouter組件之間的跳轉(zhuǎn)通信创译,至于base呢是定義一些公共的東西。
4.由于我們組件肯定是合并在app中運(yùn)行的墙基,所以我們必須依賴module软族。
5.接下來開始編寫通信相關(guān)的東西,上圖(大白話真的沒有營養(yǎng))
上面可以看到主要的類有六個残制。
1.base中IModuleInit是一個給moudle實(shí)現(xiàn)初始化的接口立砸。2.BaseModule是初始化一些公共的三方庫或者必要公共。
3.ModuleLifecyleConfig是用于application進(jìn)行反射各個module初始化類
4.ModuleLifecyleReflexs是存放各個實(shí)現(xiàn)IModuleInit類的路徑初茶。
5.MyRouterPath是存放路徑的類
6.CommonTools是一個工具類颗祝,為啥要用這個(其實(shí)這個是不必要的,但是可以寫獲取application的context或者application中的一些對象引用)
6.接下來他們是怎么組合為一個app的關(guān)鍵點(diǎn)恼布,上圖:
1.可以看到這個app下只有一個application啥也沒有
2.可以看到在app的onCreate中螺戳,只調(diào)用了一行代碼,對只有一行折汞。
3.上面說過每個module都會實(shí)現(xiàn)base中的初始化接口倔幼,然后可以初始化一些自己的東西。
4.下面就是一些內(nèi)容爽待,看看就可以了损同,沒有什么難度
這是關(guān)鍵代碼,沒錯就是上面提到的反射初始化每個module鸟款,讓每個module都可以獲取appLication對象揖庄。
7.接下來就是我們的業(yè)務(wù)邏輯,簡單了解即可:
[圖片上傳中...(image.png-8fcca-1648650154333-0)]
后面都會配上圖的
1.就是弄一個跳轉(zhuǎn)到主界面的邏輯
那問題就來欠雌,組件化蹄梢,我們該在哪里配置閃屏界面,沒錯當(dāng)然是組件化的殼。
2.跳轉(zhuǎn)的main界面就配置在module_main即可:
3.剩下的快速過了禁炒,基本完畢了:
這里就是一個跳轉(zhuǎn)到主界面的邏輯而咆,如果不懂先看看ARouter在看這個文章。
可以看到跳轉(zhuǎn)攜帶的參數(shù)和一個requestCode幕袱,接下里就是和正常使用ARouter一樣了暴备。
4.然后module_main的mian界面跳轉(zhuǎn)到module_home的界面的處理就是正常使用了,沒啥可以講的们豌,直接配圖吧涯捻。
這些就是正常交互了,跳轉(zhuǎn)獲取數(shù)據(jù)然后再返回處理數(shù)據(jù)望迎。
8.最后的關(guān)鍵點(diǎn)在這里障癌,我們打包運(yùn)行的時候肯定是要合并到殼的配置xml中(需要這個關(guān)鍵配置):
沒錯就是這個不能少,在最上面的截圖也有展示的辩尊,忘記了的從頭看看就明白涛浙。
9.有時候我們?yōu)榱丝焖倬帉懡缑婊蛘吆笈_不校驗(yàn)token的情況下快速些邏輯,可以將單個module運(yùn)行起來(特別是大型項(xiàng)目中摄欲,這個開發(fā)效率特別明顯)轿亮。
1.在配置文件中設(shè)置一個單獨(dú)屬性:
2.我們單獨(dú)運(yùn)行肯定是要app的形式的
3.然后在每個要單獨(dú)運(yùn)行的module中設(shè)置一個單獨(dú)運(yùn)行的xml配置文件即可,例子:
單獨(dú)看上面不夠清晰胸墙,結(jié)合下面的看是不是足夠清晰呢
10.到上面就結(jié)速了我注,這里說一下自己對這個項(xiàng)目規(guī)劃:
1.這個項(xiàng)目本來是打算實(shí)現(xiàn)自己一個快速開發(fā)的框架 [組件化+viewBinding+mvp+(網(wǎng)絡(luò)未定)+數(shù)據(jù)庫(未定)+mmkv],
為啥不是mvvm,這個以后可能會多些一個架構(gòu)出來迟隅,但是精力有限仓手,暫時不會考慮mvvm。
2.目前來說的話玻淑,項(xiàng)目沒有足夠完善嗽冒,暫時沒有開源的打算,希望見諒补履。
3.上面的描述有哪里不夠準(zhǔn)確添坊,或者描述錯誤還希望各位指正大家多多指正,一起學(xué)習(xí)箫锤。