美文网首页
Flutter-现有项目添加Flutter之项目分离

Flutter-现有项目添加Flutter之项目分离

作者: JerrySi | 来源:发表于2019-08-02 09:58 被阅读0次

创建一个Flutter项目的时候,有多种方法。正常情况下的新项目的目录应该是下面这样的:


13183175-3327137cfd676068.png

可以看到android和ios是在一个同级目录下面,它们共用flutter模块,和React Native个目录是一样的,这种时候其实2个项目公用一个Git开发会方便些。但是我们目前2个平台的项目在2个Git上,另外如果强行把2个项目放在一个地方,不但涉及到项目结构的调整,后期开发和代码管理上也可能混乱,比如git提交有可能一会儿是iOS,一会儿又是Android,还有可能是Dart,对于执行的大前端概念的公司可能还好些,如果是平台分组的公司来说git管理起来的确不是很方便。

有没有一种办法在不影响现有开发流程的基础上,很好的处理这3块内容呢?目前能想到是下面2种方法:

  1. Flutter代码单独保存在一个Git中,每次提交的时候,触发CI工具(比如Jenkins)自动更新生成远程私有库,然后在iOS中通过pod版本(Android上通过Maven版本)来更新同步。
  2. Flutter代码一样单独保存在一个Git中,把Flutter代码以git的submodule形式放在iOS项目或者Android项目里面,每次通过Git拉取代码即可。

2种方法其实都可以,我目前采用的第二种方法,原因是相对来说好操作些。不过后续我会调整成第一种方式(目前我们已经搭建了pod和maven私有库)。

下面详细说明下第二种方法的操作流程:

  1. 首先把Flutter代码提交到Git中
  2. 到对应iOS或者Android项目需要加入的Flutter代码的目录中
  3. 添加子Git项目,运行下面命令:
// ***.git 改成第一步中git路径,my_flutter是项目中文件夹的名字。
git submodule add ***.git my_flutter
  1. 我们使用了三方工具Sourcetree来管理Git,这里在Sourcetree中我把本地代码和线上代码进行关联(通过 “添加已经存在的本地仓库” 来关联),方便我们后续Flutter代码也通过Sourcetree来管理。


    image.png

针对拉取iOS或者Android代码,不能主动拉取Flutter代码的问题,我写了下面Shell脚本:

#! /bin/sh

# 初始化submodule
git submodule init
git submodule update

# 根据环境切换分支
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脚本,可以和一些工具联合起来使用:

  • 放在Xcode的Run Script中,让Xcode编译的时候主动更新Flutter


    image.png
  • 在Android Studio中通过task来让每次clean项目时候自动运行

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

project.afterEvaluate {
    updateFlutterTask.execute()
}
  • 配合CI工具来使用,比如Jenkins。Shell已经预留环境和版本管理。

iOS中运行Xcode,Android中运行Android Studio,Flutter可以直接运行 flutter run。三部分互不干扰,各自开发,岂不美哉。

项目分离开后,如果从原生代码跳转Flutter层呢?
Flutter-现有项目添加Flutter之跳入Flutter

相关文章

网友评论

      本文标题:Flutter-现有项目添加Flutter之项目分离

      本文链接:https://www.haomeiwen.com/subject/guwqdctx.html