将 Flutter 模块集成到您的 Android 项目中
Flutter 可以作为源代码 Gradle 子项目或 AAR,逐步嵌入到您现有的 Android 应用程序中。
集成流程可以使用带有Flutter 插件 的 Android Studio IDE 完成,也可以手动完成。
集成您的 Flutter 模块
#使用 Android Studio 集成
#Android Studio IDE 可以帮助集成您的 Flutter 模块。使用 Android Studio,您可以在同一个 IDE 中编辑 Android 和 Flutter 代码。
您还可以使用 IntelliJ Flutter 插件的功能,例如 Dart 代码补全、热重载和 Widget 检查器。
要构建您的应用,Android Studio 插件会配置您的 Android 项目,以将您的 Flutter 模块添加为依赖项。
在 Android Studio 中打开您的 Android 项目。
转到文件 > 新建 > 新建项目...。将显示 新建项目 对话框。
点击Flutter。
如果系统要求您提供Flutter SDK 路径,请提供并点击 下一步 。
完成 Flutter 模块的配置。
如果你有一个现有项目:
- 要选择现有项目,请点击 项目位置 框右侧的**...**。
- 导航到您的 Flutter 项目目录。
- 点击 打开 。
如果你需要创建一个新的 Flutter 项目:
- 完成配置对话框。
- 在 项目类型 菜单中,选择 模块 。
点击 完成 。
不使用 Android Studio 集成
#要手动将 Flutter 模块与现有的 Android 应用集成,而不使用 Flutter 的 Android Studio 插件,请按照以下步骤操作:
创建 Flutter 模块
#假设您在some/path/MyApp
中有一个现有的 Android 应用,并且您希望您的 Flutter 项目作为同级项目:
cd some/path/
flutter create -t module --org com.example flutter_module
这将创建一个some/path/flutter_module/
Flutter 模块项目,其中包含一些 Dart 代码以帮助您入门,以及一个.android/
隐藏子文件夹。.android
文件夹包含一个 Android 项目,它既可以帮助您通过flutter run
运行 Flutter 模块的精简独立版本,也可以作为帮助引导 Flutter 模块成为可嵌入 Android 库的包装器。
Java 版本要求
#Flutter 要求您的项目声明与 Java 11 或更高版本兼容。
在尝试将 Flutter 模块项目连接到主机 Android 应用之前,请确保您的主机 Android 应用在应用的build.gradle
文件中,android { }
块下声明以下源代码兼容性。
android {
// ...
compileOptions {
sourceCompatibility = 11 // 最小值
targetCompatibility = 11 // 最小值
}
}
集中存储库设置
#从 Gradle 7 开始,Android 建议在settings.gradle
中使用集中的存储库声明,而不是在build.gradle
文件中使用项目或模块级别的声明。
在尝试将 Flutter 模块项目连接到主机 Android 应用之前,请进行以下更改。
删除所有应用的
build.gradle
文件中的repositories
块。groovy// 从下一行开始删除以下块 repositories { google() mavenCentral() } // ...到前一行
将此步骤中显示的
dependencyResolutionManagement
添加到settings.gradle
文件。groovydependencyResolutionManagement { repositoriesMode = RepositoriesMode.PREFER_SETTINGS repositories { google() mavenCentral() } }
添加 Flutter 模块作为依赖项
#将 Flutter 模块添加为现有应用在 Gradle 中的依赖项。您可以通过两种方式实现此目的。
Android 归档文件 AAR 机制创建通用的 Android AAR 作为中间体,用于打包您的 Flutter 模块。当您的下游应用构建者不想安装 Flutter SDK 时,这很好。但是,如果您经常构建,它会增加一个构建步骤。
模块源代码 源代码子项目机制是一个方便的一键式构建过程,但需要 Flutter SDK。这是 Android Studio IDE 插件使用的机制。
依赖于 Android 归档文件 (AAR)
#此选项将您的 Flutter 库打包为由 AAR 和 POM 文件构成的通用本地 Maven 存储库。此选项允许您的团队在不安装 Flutter SDK 的情况下构建主机应用。然后,您可以从本地或远程存储库分发工件。
假设您在some/path/flutter_module
构建了一个 Flutter 模块,然后运行:
cd some/path/flutter_module
flutter build aar
然后,按照屏幕上的说明进行集成。
更具体地说,此命令会创建(默认情况下所有调试/概要/发布模式)一个本地存储库,其中包含以下文件:
build/host/outputs/repo
└── com
└── example
└── flutter_module
├── flutter_release
│ ├── 1.0
│ │ ├── flutter_release-1.0.aar
│ │ ├── flutter_release-1.0.aar.md5
│ │ ├── flutter_release-1.0.aar.sha1
│ │ ├── flutter_release-1.0.pom
│ │ ├── flutter_release-1.0.pom.md5
│ │ └── flutter_release-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── flutter_profile
│ ├── ...
└── flutter_debug
└── ...
要依赖于 AAR,主机应用必须能够找到这些文件。
为此,请编辑主机应用中的settings.gradle
,以便它包含本地存储库和依赖项:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
google()
mavenCentral()
maven("https://storage.googleapis.com/download.flutter.io")
}
}
dependencyResolutionManagement {
repositoriesMode = RepositoriesMode.PREFER_SETTINGS
repositories {
google()
mavenCentral()
// 从下一行开始添加新的存储库...
maven {
url = uri("some/path/flutter_module/build/host/outputs/repo")
// 如果使用相对路径,则相对于 build.gradle 文件的位置。
}
maven {
url = uri("https://storage.googleapis.com/download.flutter.io")
}
// ...到前一行
}
}
基于 Kotlin DSL 的 Android 项目
#在基于 Kotlin DSL 的 Android 项目的 aar
构建之后,请按照以下步骤添加 flutter_module。
在 Android 项目的 app/build.gradle
文件中包含 flutter 模块作为依赖项。
android {
buildTypes {
release {
...
}
debug {
...
}
create("profile") {
initWith(getByName("debug"))
}
}
dependencies {
// ...
debugImplementation("com.example.flutter_module:flutter_debug:1.0")
releaseImplementation("com.example.flutter_module:flutter_release:1.0")
add("profileImplementation", "com.example.flutter_module:flutter_profile:1.0")
}
profileImplementation
ID 是要在主机项目的 app/build.gradle
文件中实现的自定义 configuration
。
configurations {
getByName("profileImplementation") {
}
}
include(":app")
dependencyResolutionManagement {
repositories {
maven(url = "https://storage.googleapis.com/download.flutter.io")
maven(url = "some/path/flutter_module_project/build/host/outputs/repo")
}
}
依赖于模块的源代码
#此选项允许对 Android 项目和 Flutter 项目进行一步构建。当您同时处理这两个部分并快速迭代时,此选项很方便,但您的团队必须安装 Flutter SDK 才能构建主机应用。
更新 settings.gradle
#在主机应用的
在 settings.gradle
中包含 Flutter 模块。此示例假设 flutter_module
和 MyApp
存在于同一目录下。
如果您使用 Kotlin,请应用以下更改:
// 包含主机应用项目。假设现有内容。
include(":app")
// 将 "flutter_module" 替换为您运行以下命令时提供的任何包名:
// `$ flutter create -t module [package_name]
val filePath = settingsDir.parentFile.toString() + "/flutter_module/.android/include_flutter.groovy"
apply(from = File(filePath))
如果您使用 Groovy,请应用以下更改:
// 包含主机应用项目。
include(":app") // 假设现有内容
setBinding(new Binding([gradle: this])) // 新的
def filePath = settingsDir.parentFile.toString() + "/flutter_module/.android/include_flutter.groovy" // 新的
apply from: filePath // 新的
绑定和脚本评估允许 Flutter 模块在 settings.gradle
的评估上下文中 include
自身(作为 :flutter
)以及模块使用的任何 Flutter 插件(例如 :package_info
和 :video_player
)。
更新 app/build.gradle
#从您的应用中引入对 Flutter 模块的 implementation
依赖项:
dependencies {
implementation(project(":flutter"))
}
您的应用现在包含 Flutter 模块作为依赖项。
继续学习将 Flutter 屏幕添加到 Android 应用指南。
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。