項目組件化過程當中,會根據App框架、業務狀況劃分出各個獨立的模塊。一般把各個模塊的代碼管理分開,各自有獨立Git倉庫。 這樣有個好處是能夠按需clone部分模塊的代碼,再組裝成一個可運行的工程。好比,業務組的同窗開發某個Feature的時候,只需clone業務層部分模塊的代碼,不須要中間層、基礎層方面的模塊代碼(業務層模塊引用中間層、基礎層模塊打包上傳Maven的aar)。html
但在實際操做中產生的問題:git
建立建立工程初期,怎麼方便的clone各個Git倉庫 ?手動一個一個clone顯然不合適。github
在工程目錄結構中,各模塊勢必會處在根項目中,怎麼避免在提交根項目時把各模塊也提交了?使用 git submodule ?api
Gradle Repo是基於Gradle寫的一個插件,用於管理多個Git倉庫,支持方便快捷的切換分支。在根項目中會有一份配置清單repo.xml,用於描述模塊來源、工程結構以及依賴關係。app
主要作了三件事情:框架
分別在根項目settings.gradle和build.gradle引用gradle-repo對應的插件ide
settings.gradle:
buildscript {
...
dependencies {
classpath 'com.eastwood.tools.plugins:gradle-repo:1.0.0'
}
}
apply plugin: 'gradle-repo-settings'
build.gradle:
buildscript {
...
dependencies {
classpath 'com.eastwood.tools.plugins:gradle-repo:1.0.0'
}
}
apply plugin: 'gradle-repo-build'
複製代碼
在根項目下建立一個repo.xml配置清單。例如:工具
<?xml version='1.0' encoding='UTF-8'?>
<manifest>
<project origin="https://github.com/EastWoodYang/gradle-repo.git"
branch="master" >
<include name="mylibrary3"/>
</project>
<module name="app" origin="./gradle-repo-app.git">
<dependencies>
<api name="mylibrary2"/>
<implementation name="mylibrary"/>
<apiDebug name="mylibrary"/>
</dependencies>
</module>
<module name="mylibrary" origin="https://github.com/EastWoodYang/gradle-repo-mylibrary.git"/>
<module name="mylibrary2" origin="./gradle-repo-mylibrary2.git"/>
<module name="mylibrary3" />
</manifest>
複製代碼
必須且只有一個project節點,用於描述根項目。組件化
origin
: 遠程Git倉庫URLbranch
: 分支名稱能夠定義多個module節點,每一個module表示一個具備獨立Git倉庫的模塊。gradle
name
: 模塊名稱,目錄名稱需一致且惟一;必須項。local
: 相對於根項目的路徑,clone的路徑爲 root project / local / name
,缺省時路徑爲 root project / name
。origin
: 模塊的遠程Git倉庫URL,支持相對路徑。branch
: 模塊分支名稱。缺省時,同project節點的branch。是project的子節點,能夠定義多個include節點。用於表示哪些模塊和根項目同一個git倉庫。
name
: 模塊名稱是module的子節點,能夠定義多個dependencies節點。僅用於描述模塊於模塊之間的依賴關係。
其子節點的名稱需和 Gradle Dependency Configurations 中定義的一致。
name
: 模塊名稱方便對repo.xml修改後進行sync和綁定遠程git倉庫操做。
是否是不須要在settings.gradle中include模塊了 ?
是的,插件會自動include模塊。
複製代碼
怎麼切換到其餘Feature分支?
只需修改一下repo.xml project 中的branch,而後同步一下便可。
注意!修改前確保代碼已經commit或stash。儘可能不要使用Android Studio右下角那個Git分支管理工具。
複製代碼
項目已經上傳至GIthub,可直接clone體驗一下,打開時會自動clone其餘兩個模塊。
歡迎star交流,Github 項目地址:github.com/EastWoodYan…