[Android] Git组件化部署
大家好,我系苍王。
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。
[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表
这一节的内容是Git的组件化部署
建立工程后,如果你是个单人开发项目的大牛,我佩服你,可以跳过这里,然后愉快写你的代码。
但是如果你需要将组件化项目部署为多人开发,并需要使用到Git部署,那么这编文章希望能成为你的刚需。
这里介绍的是完全可以搭建出一个多人的组件化的研发框架。
优势在于
1.用文件系统将代码隔离。
2.可以功能模块独立编译,并且最终聚合编译。
3.可以自由组合自己需要的模块。
4.编译速度加快。
还有更多的妙用会在之后的章节介绍。
Gank里面新开了一个Sub的分支(https://github.com/cangwang/Gank/tree/sub),欢迎star一波
一.安装git
我一直以来其实只用傻瓜式的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,也可以扫码进群。我在这里期待你们的加入!!!
[Android] Git组件化部署相关推荐
- 阿里开源android脚手架,GitHub - HiJesse/Gaea: Android 脚手架(组件化, 插件化)
Gaea Gaea是一个基于Atlas实现Android项目组件化和插件化的脚手架. 可以根据此脚手架快速开发一款具有插件化特性的App, 也可以提供参考和帮助现有项目实现插件化. 项目模块 模块命名 ...
- android组件化架构 书,Android MVVM组件化架构方案
MVVMHabitComponent 关于Android的组件化,相信大家并不陌生,网上谈论组件化的文章,多如过江之鲫,然而一篇基于MVVM模式的组件化方案却很少.结合自身的调研和探索,在此分享一篇基 ...
- XCoreRedux框架:Android UI组件化与Redux实践
XCoreRedux框架:Android UI组件化与Redux实践 @author: 莫川 https://github.com/nuptboyzhb/ XCoreRedux源码+Demo:http ...
- android scheme 配置多个,Android业务组件化之URL Scheme使用
Android业务组件化之URL Scheme使用 H5打包的apk使用(Android平台通过UrlSchemes与第三方应用相互调用) 什么是 URL Scheme? android中的schem ...
- android app.build文件_网易友品 Android 客户端组件化演进
原文作者:简书 - 四单老师 项目背景 主站业务经历了长期的迭代维护,业务的增长同时带来每个版本业务量繁重,迭代周期很快.同时团队也在不断的扩张,对应拆分了组内不同的业务线对接不同业务线的需求,最初的 ...
- 一个 Android MVVM 组件化架构框架
模块 app: app壳 工程,是依赖所有组件的壳,该模块不应该包含任何代码,它只作为一个空壳存在,由于项目中使用了EventBusAPT技术,需要索引到各业务组件的对应的APT生成类,所以在 app ...
- Android的组件化和模块化
Android随着业务的增多,而且后续新的需求的增加,代码的修改会变得非常频繁 然后最近在看组件化和模块化 公司的业务没有那么大,所以这种方式我并没有采取 但是还是需要了解下他的使用机制 还有优缺点之 ...
- Android之组件化开发
转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 在以前的项目中都是建一个基础库,项目依赖基础库,主项目中集成了所有的功能 ...
- android pod 组件化_使用 Pod 实现私有模块化管理(组件化 Pods 实现方案)
概况 众所周知组件化是个好东西,它把项目拆分成多个模块,让每个模块能够独立出来解除各个模块之间的耦合性,作为每个独立的模块不仅仅能够使用组合的方式去组建各个不同的功能组合(前提是各个组件划分的颗粒度只 ...
最新文章
- 【转载】快速升职加薪的10个方法
- 第四十章:基于SpringBoot Quartz完成定时任务分布式多节点负载持久化
- thinkphp3.2.2前后台公用类架构问题
- Spring Security Java Config Preview--官方
- 红米note2移动4g在哪里显示无服务器,红米note2移动版能用联通4g吗?红米note2插联通卡用法介绍...
- '[linux下tomcat 配置
- java中spring的web支持nio,Spring WebClient NIO功能和问题域,与Spring Webflux一起使用
- 【Junos】手动生成Core-dump文件
- 京东集团第二季度净营收创新高 刘强东松口气:未来一定逐步向好
- SCOM 2016 配置报警邮件 (下)
- python语言程序设计教程答案赵璐_python语言程序设计教程课后答案赵璐
- Matplotlib中文乱码解决方案(1):`matplotlib.font_manager` 自定义字体
- 用python画科赫雪花
- Realtek网卡抓取带VLAN tag的报文相关设置方法
- 控制反转和依赖注入的个人理解
- python怎么用圆周率_用python程序求圆周率到任意位
- Go 1.19 发行说明(翻译)
- 最新QQ辅助任务平台悬赏接单源码+支持商家等功能
- wsgw_android,衍宏2015最美经纪人 投票查看
- 利用go-ethereum创建自己的以太坊账户