项目组件化过程当中,会根据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