一、背景
項目需求的頻繁迭代,新的產品功能在不斷添加和延伸,隨之帶來的是,項目技術復雜度的提升。
近幾年來,Android模塊化、組件化相關技術得到極速發展,將項目整體進行分層,不同的層次之間依據實際的技術功能或業務支撐或業務模塊去划分具體的組件或模塊,是組件化或模塊化一致的行動方向。
復雜的產品功能,往往也帶來組件化或模塊后具有多個組件或模塊。對於相對穩定,或具有復用能力的模塊,可以直接形成獨立的模塊,並通過獨立Git庫或項目模塊形式進行管理,像引入外部庫一樣,以獨立aar形式引入。但項目主工程自身,最終還是具有相對復雜的模塊目錄。在實際使用中,這往往可能帶來視圖上的不便。此時,我們可以通過Module目錄分組來解決。
二、Module目錄結構分組
2.1 模塊目錄分組划分
我們可以直觀一點,感受下項目主工程Module視圖展示,下圖是一個對應示例。

主工程模塊划分相對容易理解,主要包括了三個方面:
1,基於業務視角下的業務模塊划分。如新聞模塊,視頻模塊,運營廣告模塊,登錄注冊模塊等;
2,面向特定變體或構建配置下的基礎性功能模塊。Eguan模塊,Dev模塊等;
3,模塊殼工程。如各個業務模塊對應的殼工程,以方便開發過程中針對單個模塊實現安裝調試等。
示例中只是一個相對簡單的主工程目錄結構,在實際復雜些的項目中,主工程模塊將更加繁雜。這些模塊之間,從本身的職責定位上來看,是應該具有不同的層次划分的,對應的,最好應該有不同的Module分組。否則整個主工程結構看上去,很是有凌亂感。
本示例中,對於上述的“面向特定變體或構建配置下的基礎性功能模塊”和“模塊殼工程”,其實與項目實際面向用戶的主體構建時,關系並不大。我們可以將其放置到對應的Module分組中。
於是,我們可以對應創建兩個分組,對應的其實就是兩Directory,分別叫Extends和Module_App,分別用來放置上述的兩種職責定義下的模塊。
最終,主工程模塊目錄視圖為:

Extends和Module_App展開后的視圖顯示為:

頓時倍感清晰,有木有?
但此時,項目是不能直接構建成功的。
2.2 修正模塊引用配置
Module目錄結構已經發生了變化,對應需要此Module的配置,也是需要去修正的。以工程settings.gradle文件為例,初始,對應配置如下:
include ':App', ':News', ':Videos', ':Message', ':Comments', ':Pictures', ':Personal', ':Base', ':LoginReg', ':ActAd', ':Main' include ':Dev', ':Eguan' include ':Main_App', ':News_App', ':ActAd_App', ':Message_App', ':Comments_App', ':LoginReg_App', ':Personal_App', ':Pictures_App', ':Videos_App' 復制代碼
每個模塊名稱前面有個:
,表示的是相對於當前主工程的根目錄。現在部分模塊的目錄路徑變化了,對應修正如下:
include ':App', ':News', ':Videos', ':Message', ':Comments', ':Pictures', ':Personal', ':Base', ':LoginReg', ':ActAd', ':Main' include ':Extends:Dev', ':Extends:Eguan' include ':Module_App:Main_App', ':Module_App:News_App', ':Module_App:ActAd_App', ':Module_App:Message_App', ':Module_App:Comments_App', ':Module_App:LoginReg_App', ':Module_App:Personal_App', ':Module_App:Pictures_App', ':Module_App:Videos_App' 復制代碼
同樣的,如果其他模塊對Module路徑變化了的模塊有依賴,對應也需要修正。如Main模塊依賴Dev模塊,初始配置如下:
devImplementation project(':Dev') 復制代碼
現在,需要修正如下:
devImplementation project(':Extends:Dev') 復制代碼
全部修正完成,我們重新構建項目,發現項目.idea目錄下的modules.xml配置文件已自動更新了。

同時,Extens和Module_App目錄自身,也自動生成了對應的.iml文件。

同時,具體模塊下,iml模塊配置也自動進行了修正。

此時,構建成功。
PS:如果實際項目在更改成Module分組,並修改完配置后,仍然構建有不成功,可以嘗試如下步驟:
1,gradlew清除緩存:
./gradlew clean
復制代碼
2,AS清除緩存:
File >> Invalidate Caches / Restart >> Invalidate And Restart
復制代碼
3,刪除主工程根目錄下的緩存文件:
直接刪除.idea目錄,重啟AS,會自動重新生成
復制代碼
三、結語
復雜的項目中,往往具有復雜的模塊划分。依據不同的模塊職責,將其歸納到不同的Module分組中,使得平時項目開發時,有更好的清晰的視圖結構,可以將注意力更多的專注於項目真正模塊主體的開發。
模塊目錄結構的改變,實際上只是相對於項目根目錄的路徑發生了變化。對應的,我們只需要修正對應的引入到此模塊的配置即可(往往都是對應的.gralde文件),其他都沒有任何變化。
在實際項目開發中,依據實際情況,適當通過Module分組方式,可以獲得更加清晰的項目視圖結構。
end~
作者:HappyCorn
鏈接:https://juejin.im/post/5d5297db6fb9a06b0202b802
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。