内容简介:项目组件化过程中,会根据App框架、业务情况划分出各个独立的模块。通常把各个模块的代码管理分开,各自有独立Git仓库。 这样有个好处是可以按需clone部分模块的代码,再组装成一个可运行的工程。比如,业务组的同学开发某个Feature的时候,只需clone业务层部分模块的代码,不需要中间层、基础层方面的模块代码(业务层模块引用中间层、基础层模块打包上传Maven的aar)。但在实际操作中产生的问题:Gradle Repo是基于Gradle写的一个插件,用于管理多个Git仓库,支持方便快捷的切换分支。在根项
项目组件化过程中,会根据App框架、业务情况划分出各个独立的模块。通常把各个模块的代码管理分开,各自有独立Git仓库。 这样有个好处是可以按需clone部分模块的代码,再组装成一个可运行的工程。比如,业务组的同学开发某个Feature的时候,只需clone业务层部分模块的代码,不需要中间层、基础层方面的模块代码(业务层模块引用中间层、基础层模块打包上传Maven的aar)。
但在实际操作中产生的问题:
-
创建创建工程初期,怎么方便的clone各个Git仓库 ?手动一个一个clone显然不合适。
-
在工程目录结构中,各模块势必会处在根项目中,怎么避免在提交根项目时把各模块也提交了?使用 git submodule ?
- 如何从Feature A分支切换到Feature B分支 ?Android Studio 提供了Common branch的切换功能。但不同分支对应的模块不一时,是无法顺利切换过去的。
介绍 Gradle Repo
Gradle Repo是基于Gradle写的一个插件,用于管理多个Git仓库,支持方便快捷的切换分支。在根项目中会有一份配置清单repo.xml,用于描述模块来源、工程结构以及依赖关系。
主要做了三件事情:
- 从各个远程仓库clone代码到指定目录路径下。通过Git的exclude而不是submodule。
- 动态include模块,并模块间的依赖关系。
- 切换至指定分支。
使用方式
-
分别在根项目 settings.gradle 和 build.gradle 引用gradle-repo对应的插件
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配置清单。例如:
Repo 配置清单
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 节点
必须且只有一个project节点,用于描述根项目。
origin branch
module 节点
可以定义多个module节点,每个module表示一个具有独立Git仓库的模块。
-
name
: 模块名称,目录名称需一致且唯一;必须项。 -
local
: 相对于根项目的路径,clone的路径为root project / local / name
,缺省时路径为root project / name
。 -
origin
: 模块的远程Git仓库URL,支持相对路径。 -
branch
: 模块分支名称。缺省时,同project节点的branch。
include 节点
是project的子节点,可以定义多个include节点。用于表示哪些模块和根项目同一个git仓库。
-
name
: 模块名称
dependencies 节点
是module的子节点,可以定义多个dependencies节点。仅用于描述模块于模块之间的依赖关系。
其子节点的名称需和 Gradle Dependency Configurations 中定义的一致。
-
name
: 模块名称
Android Studio 插件 Gradle Repo
方便对repo.xml修改后进行sync和绑定远程git仓库操作。
常见问题
是不是不需要在settings.gradle中include模块了 ?
是的,插件会自动include模块。
怎么切换到其他Feature分支?
只需修改一下repo.xml project 中的branch,然后同步一下即可。 注意!修改前确保代码已经commit或stash。尽量不要使用Android Studio右下角那个Git分支管理工具。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Git多分支平行发展(一个仓库包含多个不同的项目)
- 在整个 Git 仓库的历史(包括所有分支和标签)中修改提交作者的信息(姓名和邮箱)
- 数据仓库(一):认识数据仓库
- Git分支相关操作
- 代码分支管理规范
- git 分支原理介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。