項目組件化過程當中,會根據App框架、業務狀況劃分出各個獨立的模塊。一般把各個模塊的代碼管理分開,各自有獨立Git倉庫。
這樣有個好處是能夠按需clone部分模塊的代碼,再組裝成一個可運行的工程。好比,業務組的同窗開發某個Feature的時候,只需clone業務層部分模塊的代碼,不須要中間層、基礎層方面的模塊代碼(業務層模塊引用中間層、基礎層模塊打包上傳Maven的aar)。html
但在實際操做中產生的問題:git
Gradle Repo是基於Gradle寫的一個插件,用於管理多個Git倉庫,支持方便快捷的切換分支。在根項目中會有一份配置清單repo.xml,用於描述模塊來源、工程結構以及依賴關係。github
主要作了三件事情:api
分別在根項目settings.gradle和build.gradle引用gradle-repo對應的插件app
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'
<?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倉庫的模塊。ide
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 中定義的一致。gradle
name
: 模塊名稱方便對repo.xml修改後進行sync和綁定遠程git倉庫操做。
是否是不須要在settings.gradle中include模塊了 ?
是的,插件會自動include模塊。
怎麼切換到其餘Feature分支?
只需修改一下repo.xml project 中的branch,而後同步一下便可。 注意!修改前確保代碼已經commit或stash。儘可能不要使用Android Studio右下角那個Git分支管理工具。
項目已經上傳至GIthub,可直接clone體驗一下,打開時會自動clone其餘兩個模塊。
歡迎star交流,Github 項目地址:https://github.com/EastWoodYang/Gradle-Repo