[Android] Git元件化部署

Cang_Wang發表於2017-06-19

大家好,我係蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表


這一節的內容是Git的元件化部署

建立工程後,如果你是個單人開發專案的大牛,我佩服你,可以跳過這裡,然後愉快寫你的程式碼。

但是如果你需要將元件化專案部署為多人開發,並需要使用到Git部署,那麼這編文章希望能成為你的剛需。

這裡介紹的是完全可以搭建出一個多人的元件化的研發框架。

優勢在於

1.用檔案系統將程式碼隔離。

2.可以功能模組獨立編譯,並且最終聚合編譯。

3.可以自由組合自己需要的模組。

4.編譯速度加快。

還有更多的妙用會在之後的章節介紹。


Gank裡面新開了一個Sub的分支(https://github.com/cangwang/Gank/tree/sub),歡迎star一波


一.安裝git

我一直以來其實只用傻瓜式的git介面工具,將程式碼放到GitHub。

[Android] Git元件化部署
GitHub

但是GitHub的UI工具,並不能提供全部的Git的功能,我們需要使用Git Bash來完成我們的操作

然後我們上Git的官網(https://git-scm.com/downloads),下載一個Git

[Android] Git元件化部署

然後安裝客戶端,注意一定要安裝Git Bash

[Android] Git元件化部署

然後一路Next安裝就可以了,我們最後再桌面可以看到Git Bash的工具,那就安裝完成了。

[Android] Git元件化部署

然後,一些GitHub賬號驗證和伺服器驗證的基礎,那就需要大家IT服務配置來完成了。這裡不做深入介紹


二.建立子模組

這裡用我的GitHub作為例子,如果自身有git伺服器,如何建立專案目錄,應該對你們來說也很容易。

New建立一個專案

[Android] Git元件化部署

填寫專案名字,然後按create repsository就可以完成

[Android] Git元件化部署

完成模組建立

[Android] Git元件化部署

然後我們使用Git Bash工具,開啟到我們的目錄,git命令,如果有用過linux命令,應該沒有太大的入門成本

[Android] Git元件化部署

然後我們需要使用命令

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

例如我的是

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

那麼git將會在我們的Gank資料夾裡面,將home裡面的內容拷貝下來,並且會建立一個.gitmodules的檔案。

[Android] Git元件化部署

我們用記事本開啟,將顯示裡面的引用內容。

[Android] Git元件化部署

然後我們已經引用了home子模組到我們的Gank目錄裡面了。

然後我們下一步,需要將home以子模組引用的方式提交到GitHub上。

我們工程裡如果有子模組,是無法使用GitHub的工具來提交到GitHub上的。提示我們需要用GitShell工具

[Android] Git元件化部署

其實我們用Git Bash工具,也是可以的。

我們使用git commit命令

[Android] Git元件化部署

如果我們git commit的時候,沒有填寫任何的描述資訊是無法提交的,所以一定要注意提交的時候務必要填寫。

[Android] Git元件化部署

然後使用git push命令就能完成提交了。

[Android] Git元件化部署

然後我們在GitHub將看到子模組的顯示和其他一般的資料夾顯示是不同的,然後點進去會跳到我們實際的home的GitHub地址裡面。

[Android] Git元件化部署


三.子模組編譯。

我們新建一個工程

[Android] Git元件化部署

使用GitHub來下載home子模組的程式碼到我們的Android 的Home工程裡面。

[Android] Git元件化部署

選定目錄到Home裡面

[Android] Git元件化部署

然後我們就能在工程裡,看到home了

[Android] Git元件化部署

然後我們新建一個lib module的程式碼,然後將基本程式碼拷貝到home裡面

[Android] Git元件化部署

然後將home作為lib module配置到settings.gradle裡面

[Android] Git元件化部署

home作為lib module配置完成了。

當然我們會元件化執行的時候,功能模組同樣需要依賴於base模組的,那麼也是非常簡單的,重複以上的操作做一個base模組。

[Android] Git元件化部署

這裡因為GitHub工具是同一個電腦是無法clone同一個工程多次,所以需要使用命令git clone可以直接克隆。

[Android] Git元件化部署

然後這個Home工程裡面,就可以作為一個單一的功能模組來開發了。

然後我們將home程式碼提交到GitHub上,提交就是上面介紹過的git commit和git push的命令。

如果我們想要將最新的程式碼更新到我們的Gank的總工程裡面,需要使用命令

git submodule update

這裡還有一個深坑的地方,因為這句命令不一定能更新子模組的程式碼,需要使用下面這一句比較保險,直接從遠端或者每個子模組的程式碼,當然相當於全部重新獲取,而不是增量獲取。

git submodule update --remote

這時候才能獲取到其子模組的最新程式碼。


三 總工程程式碼同步

如果你的其他同事,第一次下載帶有子模組的工程,會發現子模組是完全沒有任何程式碼的

[Android] Git元件化部署

你需要使用命令來拉取子工程的程式碼

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,會提示重啟,重啟完就好了。

最終專案完成全部用子模組分層後

[Android] Git元件化部署


四.注意事項

1.如果你想要完全刪除子模組

你需要執行下面兩句程式碼。

git rm -r --cached 子模組名稱

rm -rf .git/modules/子模組名稱

如果你想完全刪除,再重新拉取程式碼,一定要使用上面兩句命令,不然他會拉取快取中的內容。


2.使用GitHub是沒法提交子模組的,你子模組的程式碼,他會檢測到很多子模組資料夾修改內容的,它會提示你只能使用Git shell命令來提交,然而提交的時候,會發現根本檢測不到提交新的提交內容。

[Android] Git元件化部署

這樣如果你總工程是有很多分支的,例如我的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元件化部署

相關文章