你们好,我系苍王。
java
如下是我这个系列的相关文章,有兴趣能够参考一下,能够给个喜欢或者关注个人文章。linux
[Android]如何作一个崩溃率少于千分之三噶应用app--章节列表android
这一节的内容是Git的组件化部署git
创建工程后,若是你是个单人开发项目的大牛,我佩服你,能够跳过这里,而后愉快写你的代码。github
可是若是你须要将组件化项目部署为多人开发,并须要使用到Git部署,那么这编文章但愿能成为你的刚需。shell
优点在于缓存
1.用文件系统将代码隔离。服务器
2.能够功能模块独立编译,而且最终聚合编译。app
3.能够自由组合本身须要的模块。框架
4.编译速度加快。
还有更多的妙用会在以后的章节介绍。
我一直以来其实只用傻瓜式的git界面工具,将代码放到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,也能够扫码进群。我在这里期待大家的加入!!!