大家好,我係蒼王。
以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。
[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,也可以掃碼進群。我在這裡期待你們的加入!!!