小工具知识网

当前位置: 首页 > 行业知识 > 原生Android项目中引入Flutter并实现android 与 flutter 之间的通信

行业知识

原生Android项目中引入Flutter并实现android 与 flutter 之间的通信

2026-11-09 03:51:26 来源:互联网转载

前提条件:

    完成Flutter安装与环境搭建

一、原生Android项目中引入Flutter

1、在Android项目中,添加Flutter支持的体系结构过滤器

项目 - > app -> build.gradle

        ......    defaultConfig {        ......        ndk {            // Flutter支持的体系结构过滤器            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'        }    }

2、 Android Studio需要将你的 Flutter 模块作为依赖:

1)、在现有Android项目同级目录终端创建flutter module

前往File > New > New Flutter Project…

选择“Flutter”

填写你的 Flutter SDK path 

之后点击“Next”

点击“Next”之后,进入下面图示:

备注: Project name:创建Flutter项目名称 Projrct location:项目安装路径(要放在Android项目同级目录) Project type:选择“Module” 之后点击“Create”即创建一个新的Flutter Module项目。 2)、引入逻辑
  • 在app下的build.gradle文件中添加以下配置
    compileOptions {  sourceCompatibility 1.8  targetCompatibility 1.8} 
            我们知道这是使用Java 8所需要的配置,在这里的作用是为了解决版本兼容问题,如果不配置的话运行项目可能会报错:Invoke-customs are only supported starting with Android O (--min-api 26)。 如果新创建的Android项目build.gradle已存在,就不需要添加上述配置了。
    • 然后在项目根目录下的setting.gradle文件中配置:
      // 加入下面配置setBinding(new Binding([gradle: this]))evaluate(new File(        settingsDir.parentFile,        'flutter_data/.android/include_flutter.groovy'))

      说明:flutter_data是上面刚创建的Flutter Module项目名称

      之后“Sync Now”一下项目。

      • 如果sync项目报Failed to apply plugin class 'FlutterPlugin'.错 解决办法: 打开setting.gradle,将repositoriesMode改为:RepositoriesMode.PREFER_PROJECT

        改后:

        将RepositoriesMode模式替换后,再点击“Try Again”

        如果还遇到第三方解析失败,在app -> build.gradle中添加maven:

        dependencyResolutionManagement {  repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)  repositories {    maven { url 'https://jitpack.io' }    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }    maven { url 'https://maven.aliyun.com/repository/central' }    maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }    google()    mavenCentral()  }}

        另外在项目下的build.gradel 添加:

        allprojects {  repositories {    maven { url 'https://jitpack.io' }    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }    maven { url 'https://maven.aliyun.com/repository/central' }    maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }    google()    mavenCentral()  }}task clean(type: Delete) {    delete rootProject.buildDir}

        如图所示:

        • Sync后我们可以看到项目中多了一个名称为flutter的library module:

          我们需要在app下的build.gradle文件中添加该module的依赖。

          dependencies {    ......    implementation project(':flutter')}

          “Sync”一下项目这样就成功地将Flutter引入到了Android原生项目中。

          二、Android与Flutter交互

                  上面的项目,每次要看flutter代码是不是每次都要切过来切过去的,所以呢,我们可以在setting.gradle 加上这么一行代码:

          加下面两行主要目的是直接在原生的app工程下,查看flutter的代码,避免切来切去

          include "flutter_data"

          project(':flutter_data').projectDir = new File('../flutter_data')

          添加代码后“sync”项目,会生成flutter_data项目,这样就可以直接在原生app中修改flutter中代码了。

          1、Android跳转Flutter

          1)、在清单AndroidManifest里面添加 FlutterActivity在清单AndroidManifest里面添加 FlutterActivity

           

          在MainActivity中,调用点击事件,直接跳转:

          btnSendFlutter.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                startActivity(FlutterActivity.createDefaultIntent(MainActivity.this));            } });
          2)、上述跳转你会发现跳转有些慢或者常出现卡顿现象,所以我们常用带有 缓存的初始路由来 启动FlutterActivity 创建一个Application:
          public class MyApplication extends Application {    private FlutterEngine flutterEngine;    @Override    public void onCreate() {        super.onCreate();        // 创建一个Flutter引擎        flutterEngine = new FlutterEngine(this);        // 开始执行 Dart 代码来预热flutter引擎        flutterEngine.getDartExecutor().executeDartEntrypoint(                DartExecutor.DartEntrypoint.createDefault()        );        //缓存Flutter引擎用来开启FlutterActivity        FlutterEngineCache                .getInstance()                .put("my_engine_id", flutterEngine);    }}

          在AndroidManifest.xml中使用引用的Application:

          android:name=".MyApplication"

          使用缓存引擎跳转Flutter:

          startActivity(     FlutterActivity    .withCachedEngine("my_engine_id")    .build(MainActivity.this));

上一篇:揭秘高效PHP源码,打造吸引人的产品展示平台!

下一篇:JSP实现选项卡制作全攻略,步骤详解与技巧分享