原生工程集成Flutter

目录

  • 背景
    • 创建Flutter Module
    • 依赖引入
    • 进行flutter 调用
    • 进行Flutter 代码开发调试
    • 遇到的问题
    • 参考链接

背景

随着Flutter的不断完善,逐渐有更多的功能可以考虑使用Flutter 来实现,开发的过程就会发现,我们肯定不能抛弃原有的APP的所有功能进行重写,一般都是针对一些新的业务场景使用Flutter 来实现,这就不可避免的会遇到如果使用Flutter与Android 和iOS进行混合开发的问题。本文会介绍一下Android端开发Flutter的整个流程。

创建Flutter Module

混合开发的模式,我们首先需要创建一个Flutter Module,Flutter Module的创建有两种方式:

  1. AS直接创建

File–>New Module,选择FlutterModule,Module的存放位置可以根据你自己的需求进行存放。这里在app 同一层级,创建了一个叫android_module的来存放。
原生工程集成Flutter_第1张图片

依赖引入

  1. 修改setting.gradle 文件,进行依赖引入
setBinding(new Binding([gradle: this]))
evaluate(new File(
       settingsDir,
       '/android_module/flutter_module/.android/include_flutter.groovy'
))
rootProject.name='FlutterMix'

include ':flutter_module'
project(':flutter_module').projectDir = new File('/android_module/flutter_module') 

其中,setBinding与evaluate表示允许Flutter模块包括它自己在内的任何Flutter插件,在settings.gradle中以类似 :flutter、package_info的方式存在。sync 之后,会在如下路径,会有一个Flutter 文件夹生成。
原生工程集成Flutter_第2张图片

  1. 修改build.gradle进行依赖

在dependencies下面增加如下配置:implementation project(path: ':flutter')这里介绍一下,之所以要叫flutter,是因为跟上面第二步生成的Flutter 文件夹保持一致。另外,在android 标签增加使用java8来进行编译compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

进行flutter 调用

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FlutterView flutterView = Flutter.createView(this, getLifecycle(), "initialRoute");
        setContentView(flutterView);
    }
}

原生工程集成Flutter_第3张图片

进行Flutter 代码开发调试

使用AS打开module 工程。退出引用程序,然后点击Flutter attach,打开你的应用程序,等待连接上即可。就能够像正常开发一样调试flutter代码了。

遇到的问题

如果你也是通过AS新创建的Demo工作来实践,可以会遇到相关依赖包找不到的问题,这个是因为你之前已经选择过工程支持androidx,新创建的默认都使用androidx的方式来进行相关的support支持。但是创建的Flutter 工程,还是使用的是普通的导入,删除其相关的导入,换成androidx的即可。

参考链接

1、https://developer.android.com/jetpack/androidx/releases/lifecycle
2、https://flutter.dev/docs/development/add-to-app/android/project-setup

你可能感兴趣的:(Flutter开发)