该篇文章介绍在已有Android工程中嵌入flutter module,以达到混合开发,前提是已经配置好flutter开发环境,配置请参考https://flutterchina.club/setup-macos/
创建Flutter module
在当前project下 运行命令
flutter create -t module my_flutter(my_flutter为生成的flutter module名称)
增加配置代码
(1) 在工程的settings.gradle增加以下配置
(2)在app (假如你的Android应用名称为app)的build.gradle文件下dependencies增加如下依赖
其中flutter工程为创建Flutter module过程自动生成的,注意就是flutter,b
注意 其中 minSdkVersion 需要至少为16,否则会报错
生成的工程结构如下:
在Android工程中创建Flutter的UI(调用Flutter中的dart编写的widget)
Flutter提供两种方法引入,一种是View,一种是Fragment,View如下
其中,第二个参数是Lifecycle对象, 第三个参数为route,这个参数Flutter端可以通过window.defaultRouteName获取,利用它flutter可知道要创建哪个widget.
同理 Flutter.createFragment(String route)可生成FlutterFragment
顺便说明下在运行后会发现有白屏的情况,是因为在debug模式下运行的原因,无需理会,最终发布release模式下会很快的
Flutter module支持hot reload (热重载)
进入到flutter module目录下
执行命令 flutter attach 即可
如上就说明连接成功,只要有改动,键盘敲击R或者r 即可看到更改
如果你运行命令后一直在waiting,可尝试杀死该应用进程后再重启,进入相关Flutter页面就可连接上了
签名打包
引入Flutter module后,对原生工程构建基本没影响,按常规操作即可, 编译模式可参考之前我写的文章Flutter编译模式
官方文档:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps