[Android] Git组件化部署

你们好,我系苍王。
java

如下是我这个系列的相关文章,有兴趣能够参考一下,能够给个喜欢或者关注个人文章。linux

[Android]如何作一个崩溃率少于千分之三噶应用app--章节列表android


这一节的内容是Git的组件化部署git

创建工程后,若是你是个单人开发项目的大牛,我佩服你,能够跳过这里,而后愉快写你的代码。github

可是若是你须要将组件化项目部署为多人开发,并须要使用到Git部署,那么这编文章但愿能成为你的刚需。shell

这里介绍的是彻底能够搭建出一个多人的组件化的研发框架。

优点在于缓存

1.用文件系统将代码隔离。服务器

2.能够功能模块独立编译,而且最终聚合编译。app

3.能够自由组合本身须要的模块。框架

4.编译速度加快。

还有更多的妙用会在以后的章节介绍。


Gank里面新开了一个Sub的分支(https://github.com/cangwang/Gank/tree/sub),欢迎star一波


一.安装git

我一直以来其实只用傻瓜式的git界面工具,将代码放到GitHub。


GitHub

可是GitHub的UI工具,并不能提供所有的Git的功能,咱们须要使用Git Bash来完成咱们的操做

而后咱们上Git的官网(https://git-scm.com/downloads),下载一个Git


而后安装客户端,注意必定要安装Git Bash


而后一路Next安装就能够了,咱们最后再桌面能够看到Git Bash的工具,那就安装完成了。


而后,一些GitHub帐号验证和服务器验证的基础,那就须要你们IT服务配置来完成了。这里不作深刻介绍


二.建立子模块

这里用个人GitHub做为例子,若是自身有git服务器,如何建立项目目录,应该对大家来讲也很容易。

New建立一个项目


填写项目名字,而后按create repsository就能够完成


完成模块建立


而后咱们使用Git Bash工具,打开到咱们的目录,git命令,若是有用过linux命令,应该没有太大的入门成本


而后咱们须要使用命令

git submodule add 你想依赖的module的git地址

例如个人是

git submodule add https://github.com/cangwang/home

那么git将会在咱们的Gank文件夹里面,将home里面的内容拷贝下来,而且会建立一个.gitmodules的文件。


咱们用记事本打开,将显示里面的引用内容。


而后咱们已经引用了home子模块到咱们的Gank目录里面了。

而后咱们下一步,须要将home以子模块引用的方式提交到GitHub上。

咱们工程里若是有子模块,是没法使用GitHub的工具来提交到GitHub上的。提示咱们须要用GitShell工具


其实咱们用Git Bash工具,也是能够的。

咱们使用git commit命令


若是咱们git commit的时候,没有填写任何的描述信息是没法提交的,因此必定要注意提交的时候务必要填写。


而后使用git push命令就能完成提交了。


而后咱们在GitHub将看到子模块的显示和其余通常的文件夹显示是不一样的,而后点进去会跳到咱们实际的home的GitHub地址里面。



三.子模块编译。

咱们新建一个工程


使用GitHub来下载home子模块的代码到咱们的Android 的Home工程里面。


选定目录到Home里面


而后咱们就能在工程里,看到home了


而后咱们新建一个lib module的代码,而后将基本代码拷贝到home里面


而后将home做为lib module配置到settings.gradle里面


home做为lib module配置完成了。

固然咱们会组件化运行的时候,功能模块一样须要依赖于base模块的,那么也是很是简单的,重复以上的操做作一个base模块。


这里由于GitHub工具是同一个电脑是没法clone同一个工程屡次,因此须要使用命令git clone能够直接克隆。


而后这个Home工程里面,就能够做为一个单一的功能模块来开发了。

而后咱们将home代码提交到GitHub上,提交就是上面介绍过的git commit和git push的命令。

若是咱们想要将最新的代码更新到咱们的Gank的总工程里面,须要使用命令

git submodule update

这里还有一个深坑的地方,由于这句命令不必定能更新子模块的代码,须要使用下面这一句比较保险,直接从远端或者每一个子模块的代码,固然至关于所有从新获取,而不是增量获取。

git submodule update --remote

这时候才能获取到其子模块的最新代码。


三 总工程代码同步

若是你的其余同事,第一次下载带有子模块的工程,会发现子模块是彻底没有任何代码的


你须要使用命令来拉取子工程的代码

git submodule update --init --recursive

然而就算你拉取了代码下来,仍是没法运行

有可能会提示错误

Plugins Suggestion

Unknown features (Run Configuration[AndroidRunConfigurationType], Facet[android, android-gradle]) covered by disabled plugin detected. Enable plugins... Ignore Unknown Features

这是由于android surport没有被勾选致使的,勾选一下重启AS就能够了

方法:左上角File >> Setting >> Plugins >> 把Android Support勾选上,点击Apply,再点OK,会提示重启,重启完就行了。

最终项目完成所有用子模块分层后



四.注意事项

1.若是你想要彻底删除子模块

你须要运行下面两句代码。

git rm -r --cached 子模块名称

rm -rf .git/modules/子模块名称

若是你想彻底删除,再从新拉取代码,必定要使用上面两句命令,否则他会拉取缓存中的内容。


2.使用GitHub是无法提交子模块的,你子模块的代码,他会检测到不少子模块文件夹修改内容的,它会提示你只能使用Git shell命令来提交,然而提交的时候,会发现根本检测不到提交新的提交内容。


这样若是你总工程是有不少分支的,例如个人Gank有kotlin,java,sub三个分支,我想切换分支,是没法使用GitHub按钮切换的。

只能使用Git Bash命令行来作

切换的命令

git checkout 分支名字

切换前必定要将其余额外的修改提交了,才能切换成功的。


3.为什么我不方便一点直接子项目,直接就是一个Android工程,而如今只是一个lib module的库呢?

其根本是由于Git的机制。

使用git submodule add 地址 的时候,其会检测必定是一整个项目,没法add指定的某个项目中指定的文件夹。

Android studio 和git的相互制约,咱们如今只能使用这样的机制开发。


4.子模块中,若是引用的额外的xxx.gradle gradle.properties文件。

(1).代码须要手动提交到总工程

(2).再作一个子模块,而后让总工程中的引用到这个子模块中,其余子模块研发的时引用这个子模块,而且将这些配置文件所有引用这个子模块,那么修改的时候也能够同步。


5.Git子模块的更深刻的运用仍是查看官网中的介绍(https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97)


五.总结

Android studio 和Git机制的限制,因此如今的开发框架,并不是绝对的完善和最优。

若是对Git 子模块更加深刻的研究,和更好的部署实践,欢迎提出建议,会尽可能完善这个组件化部署的简书文章。


若是找到努力的方向,那就去践行吧。

下一节将会更精彩,敬请期待!!!

群号是316556016,也能够扫码进群。我在这里期待大家的加入!!!

相关文章
相关标签/搜索