如何在 Android 项目中集成 Flutter?

官方文档地址:flutter.cn/docs/add-to...

将 Flutter module 作为依赖项

主要有两种方法将 Flutter 模块添加为 Gradle 中宿主应用程序的依赖项。

  1. AAR 集成 AAR 机制可以为每个 Flutter 模块创建 Android AAR 作为依赖媒介。当你的宿主应用程序开发者不想安装 Flutter SDK 时,这是一个很好方案。但是每次修改都需要重新编译。
  2. 模块源码集成 直接将 Flutter 模块的源码作为子项目的依赖机制是一种便捷的一键式构建方案,但此时需要另外安装 Flutter SDK,这是目前 Android Studio IDE 插件使用的机制。

模块源码集成

介绍模块源码集成,这种方式的特定是将 Flutter 模块的源码作为子项目来依赖,需要开发人员本地具备 flutter 的开发环境。

流程步骤:

  1. 新建一个 Android 工程或者打开一个已有的 Android 工程
  2. 以 module 的形成创建一个 flutter 工程的 module,注意目录结构和 Android 工程平级
  3. 修改 settings.gradle 的设置
  4. 修改 build.gradle 的设置

一:这里我们用新项目演示,新建一个 Android 工程,名称是 AndroidWithFlutter。

二:使用File > New > New Flutter Project创建,选择Module,注意目录结构和 Android 工程平级,尽量是平级,不是的话后续的引入路径需要改一下。

目录结构是这样的:

markdown 复制代码
- WorkProject
    -  AndroidWithFlutter
    -  flutter_module

创建 flutter 项目(module 形式)的时候如上图所示,名称是:flutter_module

类型是:module,上图 3 处想要修改的话需要先把类型改为 application 才能修改语言和平台,这点注意一下。

三:修改 settings.gradle 的设置

在 AndroidWithFlutter 项目的 settings.gradle中添加如下配置:

arduino 复制代码
setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir.parentFile,
        'flutter_module/.android/include_flutter.groovy'
))

在settings.gradle的dependencyResolutionManagemen修改repositoriesMode的配置,改完如下所示:

rust 复制代码
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public'}
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url "https://jitpack.io" }
        google()
        mavenCentral()
    }
}

这个配置有三种方式:

  1. FAIL_ON_PROJECT_REPOS

表示如果工程单独设置了仓库,或工程的插件设置了仓库,构建就直接报错抛出异常

  1. PREFER_PROJECT

表示如果工程单独设置了仓库,就优先使用工程配置的,忽略settings里面的

  1. PREFER_SETTINGS

表述任何通过工程单独设置或插件设置的仓库,都会被忽略

原来settings.gradle里配置的是FAIL_ON_PROJECT_REPOS,而flutter_module单独设置了repository,所以会构建报错,改成PREFER_PROJECT之后,会忽略settings里面的配置,而高版本 gradle 的 Android 项目Android仓库配置都在settings.gradle中,所以需要设置仓库配置到 build.gradle

四:修改项目 build.gradle和 app 的build.gradle

修改项目 build.gradle,添加如下内容

scss 复制代码
allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

修改 app 的build.gradle,依赖 flutter_module

添加Flutter页面

在清单文件注册 FlutterActivity 页面

ini 复制代码
        <activity
            android:name="io.flutter.embedding.android.FlutterActivity"
            android:screenOrientation="portrait" />

然后加载该 Activity

scala 复制代码
public class MainActivity extends AppCompatActivity {

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((Button)findViewById(R.id.btn)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(
                        FlutterActivity.createDefaultIntent(MainActivity.this)
                );
            }
        });
    }
}

以 aar 的形式集成

aar 的形式,开发人员本地不需要具备 flutter 的开发环境,但是每次修改都需要重新编译。

官方文档地址:flutter.cn/docs/add-to...

步骤:

  1. 新建一个 Android 工程或者打开一个已有的 Android 工程
  2. 以 module 的形成创建一个 flutter 工程的 module,注意目录结构和 Android 工程平级
  3. 运行 flutter build aar 根据提示配置项目

前两步骤和以模块集成是一样的,这里就不重复了。有一点不一样的是这里flutter module 的名称是:myfluttermodule

打开 flutter 工程,在命令行执行 flutter build aar ,提示:

sql 复制代码
Consuming the Module
  1. Open <host>/app/build.gradle
  2. Ensure you have the repositories configured, otherwise add them:

      String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
      repositories {
        maven {
            url '/Users/tuionf/work/AndroidStudioProjects/myfluttermodule/build/host/outputs/repo'
        }
        maven {
            url "$storageUrl/download.flutter.io"
        }
      }

  3. Make the host app depend on the Flutter module:

    dependencies {
      debugImplementation 'com.example.myfluttermodule.myfluttermodule:flutter_debug:1.0'
      profileImplementation 'com.example.myfluttermodule.myfluttermodule:flutter_profile:1.0'
      releaseImplementation 'com.example.myfluttermodule.myfluttermodule:flutter_release:1.0'
    }


  4. 
    android {
      buildTypes {
        profile {
          initWith debug
        }
      }
    }

我们按照提示操作,注意下面的操作是在宿主 APP 里面:

  1. 配置仓库地址,提示是build.gradle,但实际上高版本gradle 的仓库地址在 setting.gradle 里面,参考下图配置红框位置,注意用你自己执行 flutter build aar 后的提示:
  1. 添加依赖
  1. 添加 profile build type

完成上面的步骤之后,然后注册 flutteractivity,加个跳转就可以了,参考上面源码依赖里面的 添加Flutter页面 部分。

相关推荐
奔跑吧 android38 分钟前
【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SGSIT/SERR/BV-01-C】
android·pts·aosp·pbap·sgsit
難釋懷3 小时前
Android开发-Application
android
0wioiw04 小时前
Flutter基础()
flutter
seven27295 小时前
Android 适配之——targetSdkVersion 30升级到31-34需要注意些什么?
android·版本设置31-34·targetsdk
androidwork7 小时前
Kotlin Android单元测试MockK指南
android·kotlin
麻辣璐璐7 小时前
Kotlin并发请求的一些知识记录
android·kotlin
东风西巷7 小时前
MobiPDF:安卓设备上的专业PDF阅读与编辑工具
android·智能手机·pdf·软件需求
肥肥呀呀呀7 小时前
flutter 视频通话flutter_webrtc
flutter
難釋懷9 小时前
Android开发-在应用之间共享数据
android·jvm·oracle
明似水9 小时前
2025年Flutter项目管理技能要求
flutter