Flutter-現(xiàn)有項(xiàng)目添加Flutter之項(xiàng)目分離

創(chuàng)建一個(gè)Flutter項(xiàng)目的時(shí)候,有多種方法。正常情況下的新項(xiàng)目的目錄應(yīng)該是下面這樣的:


13183175-3327137cfd676068.png

可以看到android和ios是在一個(gè)同級(jí)目錄下面,它們共用flutter模塊,和React Native個(gè)目錄是一樣的,這種時(shí)候其實(shí)2個(gè)項(xiàng)目公用一個(gè)Git開發(fā)會(huì)方便些。但是我們目前2個(gè)平臺(tái)的項(xiàng)目在2個(gè)Git上,另外如果強(qiáng)行把2個(gè)項(xiàng)目放在一個(gè)地方,不但涉及到項(xiàng)目結(jié)構(gòu)的調(diào)整,后期開發(fā)和代碼管理上也可能混亂,比如git提交有可能一會(huì)兒是iOS,一會(huì)兒又是Android,還有可能是Dart,對于執(zhí)行的大前端概念的公司可能還好些,如果是平臺(tái)分組的公司來說git管理起來的確不是很方便。

有沒有一種辦法在不影響現(xiàn)有開發(fā)流程的基礎(chǔ)上,很好的處理這3塊內(nèi)容呢?目前能想到是下面2種方法:

  1. Flutter代碼單獨(dú)保存在一個(gè)Git中,每次提交的時(shí)候,觸發(fā)CI工具(比如Jenkins)自動(dòng)更新生成遠(yuǎn)程私有庫,然后在iOS中通過pod版本(Android上通過Maven版本)來更新同步。
  2. Flutter代碼一樣單獨(dú)保存在一個(gè)Git中,把Flutter代碼以git的submodule形式放在iOS項(xiàng)目或者Android項(xiàng)目里面,每次通過Git拉取代碼即可。

2種方法其實(shí)都可以,我目前采用的第二種方法,原因是相對來說好操作些。不過后續(xù)我會(huì)調(diào)整成第一種方式(目前我們已經(jīng)搭建了pod和maven私有庫)。

下面詳細(xì)說明下第二種方法的操作流程:

  1. 首先把Flutter代碼提交到Git中
  2. 到對應(yīng)iOS或者Android項(xiàng)目需要加入的Flutter代碼的目錄中
  3. 添加子Git項(xiàng)目,運(yùn)行下面命令:
// ***.git 改成第一步中g(shù)it路徑,my_flutter是項(xiàng)目中文件夾的名字。
git submodule add ***.git my_flutter
  1. 我們使用了三方工具Sourcetree來管理Git,這里在Sourcetree中我把本地代碼和線上代碼進(jìn)行關(guān)聯(lián)(通過 “添加已經(jīng)存在的本地倉庫” 來關(guān)聯(lián)),方便我們后續(xù)Flutter代碼也通過Sourcetree來管理。


    image.png

針對拉取iOS或者Android代碼,不能主動(dòng)拉取Flutter代碼的問題,我寫了下面Shell腳本:

#! /bin/sh

# 初始化submodule
git submodule init
git submodule update

# 根據(jù)環(huán)境切換分支
cd ./my_flutter/
git fetch origin

if [ $1 ] && [ $1 = Release ]
then
echo '切換到master分支'
git reset --hard tags/v0.0.1

else
echo '切換到develop分支'
git reset --hard origin/develop
fi

git pull

flutter packages get

# 針對iOS的Shell
# cd ..
# pod install

上面Shell腳本,可以和一些工具聯(lián)合起來使用:

  • 放在Xcode的Run Script中,讓Xcode編譯的時(shí)候主動(dòng)更新Flutter


    image.png
  • 在Android Studio中通過task來讓每次clean項(xiàng)目時(shí)候自動(dòng)運(yùn)行

task updateFlutterTask(type: Exec) {
    workingDir '../'
    commandLine 'sh', 'setupFlutter.sh'
}

project.afterEvaluate {
    updateFlutterTask.execute()
}
  • 配合CI工具來使用,比如Jenkins。Shell已經(jīng)預(yù)留環(huán)境和版本管理。

iOS中運(yùn)行Xcode,Android中運(yùn)行Android Studio,F(xiàn)lutter可以直接運(yùn)行 flutter run。三部分互不干擾,各自開發(fā),豈不美哉。

項(xiàng)目分離開后,如果從原生代碼跳轉(zhuǎn)Flutter層呢?
Flutter-現(xiàn)有項(xiàng)目添加Flutter之跳入Flutter

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容