Android Flutter 入门笔记

6 阅读3分钟

通常有两种主流的集成方式,它们的核心区别在于是否需要团队所有成员都安装 Flutter SDK。下面这个表格可以帮你快速理解并做出选择:

特性源码集成AAR 集成
适用场景团队协作开发,需要频繁调试 Flutter 代码 。团队只需集成功能,无需安装 Flutter SDK 。
优点一键式构建,修改 Flutter 代码后可以立即生效,支持热重载 。隔离性好,原生项目无需安装 Flutter 环境,构建速度更快 。
缺点所有开发人员都必须在本地安装 Flutter SDK每次更新 Flutter 代码,都需要重新运行 flutter build aar 命令 。

接下来,我们看看具体的操作步骤。

🚶 操作步骤:从创建到集成

整个过程可以分为三步:创建模块、配置宿主项目、添加依赖。

第一步:创建 Flutter 模块

假设你的 Android 原生项目位于 some/path/MyApp,打开终端,进入这个目录的上级目录,然后执行以下命令来创建一个同级的 Flutter module:

cd some/path/
flutter create -t module --org com.example my_flutter_module

这里的 --org 参数指定了你的包名,my_flutter_module 是模块的名字 。创建成功后,你会得到一个包含 Dart 代码的 Flutter 模块项目。

第二步:配置 Android 宿主项目

在连接两者之前,需要对你的 Android 项目进行一些基础配置,以确保兼容性 。

  • Java 版本要求:在你的 Android 项目(MyApp/app/build.gradle)中,确保 compileOptions 指定了 Java 17。

    android {
        // ...
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_17
            targetCompatibility = JavaVersion.VERSION_17
        }
        // ...
    }
    
  • 统一仓库配置:在你的项目根目录的 settings.gradle 文件中,配置统一的仓库管理,并添加 Flutter 所需的 Google 仓库。

    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
        repositories {
            google()
            mavenCentral()
            // 添加 Flutter 的下载仓库
            maven { url 'https://storage.googleapis.com/download.flutter.io' }
        }
    }
    

第三步:选择并配置依赖

这一步是关键,你可以根据之前的对比表格,选择最适合你当前开发阶段的方式。

✅ 方案 A:源码集成 (适合日常开发) 这种方式下,Flutter 模块会像一个 Android Library 模块一样被引用。

  1. 配置 settings.gradle:在你的 Android 项目 (MyApp/settings.gradle) 中,添加以下代码来引入 Flutter 模块。

    // 将 my_flutter_module 替换为你创建的模块名
    def flutterProjectRoot = new File(settingsDir, "../my_flutter_module")
    def flutterModuleFile = new File(flutterProjectRoot, ".android/include_flutter.groovy")
    if (flutterModuleFile.exists()) {
        // 这行脚本会帮你自动配置好 :flutter 项目和它的插件
        apply from: flutterModuleFile
    }
    
    include ':app'
    

    注意:这里的路径 "../my_flutter_module" 是相对于你的 Android 项目 settings.gradle 文件的位置,请根据实际情况调整 。

  2. 添加依赖:在你的 app 模块的 build.gradle 文件中,添加对 Flutter 模块的依赖。

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

✅ 方案 B:AAR 集成 (适合持续集成或无需 Flutter 环境的团队) 这种方式会将 Flutter 模块打包成 AAR 文件,让原生项目像引用远程仓库一样引用它。

  1. 生成 AAR:在 Flutter 模块的目录下 (some/path/my_flutter_module),执行构建命令:

    flutter build aar
    

    执行成功后,控制台会输出详细的引入指引,一般包含以下两步 。

  2. 配置仓库:在 Android 项目的 settings.gradlerepositories 中,添加刚才构建输出的本地 Maven 仓库路径。

    dependencyResolutionManagement {
        repositories {
            // ... 其他仓库
            maven {
                url 'some/path/my_flutter_module/build/host/outputs/repo'
                // 这是相对路径,请替换为你的绝对路径或正确相对路径
            }
        }
    }
    
  3. 添加依赖:在你的 app 模块的 build.gradle 文件中,为不同的构建类型添加对应的依赖。

    dependencies {
        // ...
        debugImplementation 'com.example.my_flutter_module:flutter_debug:1.0'
        releaseImplementation 'com.example.my_flutter_module:flutter_release:1.0'
        // 如果需要 profile 模式,可以这样添加
        // profileImplementation 'com.example.my_flutter_module:flutter_profile:1.0'
    }
    

完成以上配置后,同步 Gradle,你就可以在原生代码中通过 FlutterActivity 来打开 Flutter 页面了。