内容简介:项目组件化过程中,会根据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 分支原理介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
XML Hacks
Michael Fitzgerald / O'Reilly Media, Inc. / 2004-07-27 / USD 24.95
Developers and system administrators alike are uncovering the true power of XML, the Extensible Markup Language that enables data to be sent over the Internet from one computer platform to another or ......一起来看看 《XML Hacks》 这本书的介绍吧!