Android 奇技淫巧:多個 Project 代碼同時引入
背景
從開始學習編程時,老師就告訴我們設計模式、MVC等在編程中非常重要,所以一定要努力學習。在項目設計的時候,為了更好地解耦,我們往往會將每一個小模塊都設計到了獨立的module裡面,但是這樣子雖然做了拆分,卻並不能很好地在各個項目中重用它們。因此筆者做了一個更加嚴格拆分,每一個都會放在獨立的project中,這樣就可以更好地在不同的項目里重用。不僅如此,我們在打開獨立的project時,Android Studio會運行的更流暢。
每一個library在使用的時候都會被打包成aar,上傳到公司內部的伺服器,如此進行依賴就可以避免基礎庫遭到亂改。
但是使用這種方式,並不利於源碼的閱讀。因此我們需要將不同的項目引入到同一個工種中進行載入。
引入工程
首先我們來看一下,使用module的時候,是如何引入的,如下:
現在我們需要把外部工程的module也引入進來。要怎麼做呢?
如下:
使用Android Studio打開作為主工程的項目
手動打開主工程項目根目錄下的,添加module的依賴進去
給引入的module指定的路徑(項目文件的真實路徑,建議使用相對路徑)
其中,為 toolkit 的項目目錄,這個目錄下是一個完整的AS項目,可以直接打開。
項目依賴處理
按照上面的方式,我們可以在一個項目中查看所有的module的源代碼,但是,在獨立項目中,沒有源代碼,為解決依賴問題,我們會將每一個module都上傳到伺服器,使用路徑地址來進行項目依賴管理。
那麼,問題來了。我們將所有的源代碼都引入到了一個項目中,但是代碼間的跳轉還是使用的中下載下來的代碼庫。
為了解決這個問題,我們可以定義一個變數來處理,判斷當前module是否是在獨立的項目中,如果是在獨立的項目中,使用庫的依賴,如果是以代碼的形式引入整個項目,則直接使用代碼庫的依賴。
定義變數
在每一個獨立的項目中,在文件中添加屬性,如下:
讀取的值
在文件中,讀取isAlone屬性,如果為true,依賴maven中的library, 反之依賴project中的。代碼如下:
在添加依賴的時候,可以使用代碼add的方式,當然也可以直接將不同的dependences放在不同的文件中,然後分情況依賴不同的文件,如下:
不僅是依賴可以通過groovy代碼進行添加,Android的其它屬性也可以添加,Demo如下:
到現在,我們的問題基本解決,但是我追求完美,還一個小瑕疵需要解決。
多項目引入的VCS處理
Android Studio有一個VCS的模塊,他可以快速的在AS中處理相關的邏輯。我都會使用他的Modify/New/Rename/Delete/Revert等功能。但是AS默認只能處理一個項目。所以,導致我們引入的其它Project中的Module不支持git的特點,使用起來非常的不方便。經過一系列的查找,終於找到解決方案。
一個intellij idea項目,在其根目錄下都有一個的文件夾,這個裡面存儲著整個項目的配置文件,當然也包括git的, 文件名為, 默認內容如下:
當然,我們需要更改這個文件,將我們的toolkit_lib文件夾加入到裡面,修改過後如下:
PS: toolkit_lib 和當前引入的項目在同一個文件夾下面,所以使用PROJECT_DIR相對路徑,來指定項目目錄。當然,這個地方的directory, 你也可以使用絕對路徑來指定。
依賴引入的最佳實踐
我們有多個項目需要引入,但是部分項目,沒有修改的需求,並沒有要把項目引入的需求。所以,使用一個變數,來管理所有的項目,使用起來,略顯靈活度不夠。所以,我們將每一個項目按照單獨properties來讀取其狀態,當其中一個項目的dependencies要使用maven,我們只需要將其對應的變數值設置為true或者刪除掉。讀取屬性的代碼如下:
當作為module引入的時候,只需要在主Project中的文件裡面加入對應值。
TAG:大羅說事 |