Flutter与Android的混合开发(1)如何在现有Android项目里嵌入Flutter Module

2,177 阅读2分钟
  1. 如何在现有Android项目里嵌入Flutter Module
  2. Activity如何跳转到Flutter页面,如何传值
  3. Flutter如何跳转到Activity,如何传值
  4. Android模块与Flutter模块的交互

全部源码已上传github

1.如何在现有Android项目里嵌入Flutter Module

1. 用Android Studio新建一个Android项目,我们起名叫hyBridAndroid

2. 然后关闭项目,创建一个新目录,这里我们起名叫HyBrid

然后在HyBrid目录下执行命令flutter create -t module flutter_lib(注意这里只能命令行创建,Android Studio无法在Android项目里创建Flutter Module),再把刚才创建的Android项目放到这个目录里,现在是这样的结构

3. Android Studio打开hyBridAndroid项目,然后添加依赖

本地依赖

  • 对于Android的本地依赖,主要是由include_flutter.groovy和flutter.gradle这两个脚本负责Flutter的本地依赖和产物构建

    • 在settings.gradle中注入include_flutter.groovy脚本
    • 在需要依赖的module中build.gradle添加project(':flutter')依赖
  • 代码如下所示

include ':app'
//网上好多博客是这样写的,注意有可能会出现坑,一会会说到
setBinding(new Binding([gradle: this]))
evaluate(new File(settingsDir.parentFile, 'flutter_lib/.android/include_flutter.groovy'))
  • 然后在Android原生项目中的app中的build.gradle文件中添加依赖库
implementation project(':flutter')
  • 操作到这里以后,我们的Android Studio是这样的目录结构了

有可能会出现坑

Android 开发者很容易误以为集成 Flutter Module 就像以前 Android 工程集成 Module一样,所以按照这种思路,执行依赖 Sync 的时候就会出现include\_flutter.groovy 相关文件丢失问题。解决这种问题两种思路,第一种情况,本质就是你的配置错了,官方 wiki 让你将 flutter_module 放在 Android 工程的同级目录下,而不是 Android 工程目录下。想一下这种问题为什么会出现,主要就是一些不好的文章翻译不正确导致的问题。

注意

如果你的项目中buildTypes有release,preview,debug……等等,需要在添加下面代码

buildTypes {
    release {

    }
    preview {
        //关键代码,release, debug为library中已有buildType
        matchingFallbacks = ['release', 'debug']
    }
    debug {

    }
}

4. 运行项目

现在可以直接打开`hyBridAndroid`项目编辑原生部分代码,可以打开`flutter_lib`项目编辑flutter部分代码

注意:Android项目中嵌入Flutter,Android项目和Flutter项目是分开开发的,也就是说开发的时候要分别打开Android项目和Flutter项目

参考:

github.com/yangchong21…

欢迎加入Flutter开发群457664582,点击加入,大家一起学习讨论