你們好,我係蒼王。
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,也能夠掃碼進羣。我在這裏期待大家的加入!!!