将 Flutter 模块集成到 Android 项目中
Flutter 可以分批嵌入到现有的 Android 应用程序中,作为源代码 Gradle 子项目或 AAR。
集成流程可以使用带有 Flutter 插件 的 Android Studio IDE 完成,也可以手动完成。
集成 Flutter 模块
在 Android Studio 中集成
Android Studio IDE 可以帮助集成 Flutter 模块。使用 Android Studio,您可以在同一个 IDE 中编辑 Android 和 Flutter 代码。
您还可以使用 IntelliJ Flutter 插件功能,如 Dart 代码补全、热重载和小部件检查器。
Android Studio 支持 Android Studio 2022.2 或更高版本上的添加到应用流程,并使用 IntelliJ 的 Flutter 插件。为了构建您的应用,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 // The minimum value
targetCompatibility 11 // The minimum value
}
}
集中存储库设置
从 Gradle 7 开始,Android 建议在 settings.gradle
中使用集中存储库声明,而不是在 build.gradle
文件中的项目或模块级别声明。
在尝试将 Flutter 模块项目连接到宿主 Android 应用之前,请进行以下更改。
-
删除应用的所有
build.gradle
文件中的repositories
块。// Remove the following block, starting on the next line repositories { google() mavenCentral() } // ...to the previous line
-
将此步骤中显示的
dependencyResolutionManagement
添加到settings.gradle
文件。dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { google() mavenCentral() } }
将 Flutter 模块添加为依赖项
在 Gradle 中将 Flutter 模块添加为现有应用的依赖项。你可以通过两种方式实现此目的。
-
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
然后,按照屏幕上的说明进行集成。
更具体地说,此命令(默认情况下所有 debug/profile/release 模式)创建一个 本地存储库,其中包含以下文件
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()
// Add the new repositories starting on the next line...
maven {
url 'some/path/flutter_module/build/host/outputs/repo'
// This is relative to the location of the build.gradle file
// if using a relative path.
}
maven {
url 'https://storage.googleapis.com/download.flutter.io'
}
// ...to before this line
}
}
</br>
基于 Kotlin DSL 的 Android 项目
在基于 Kotlin DSL 的 Android 项目的 aar
构建之后,请按照以下步骤添加 flutter_module。
将 flutter 模块作为依赖项包含在 Android 项目的 app/build.gradle
文件中。
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 是一个自定义 configuration
,将在宿主项目的 app/build.gradle
文件中实现。
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 才能构建宿主应用。
将 Flutter 模块作为子项目包含在宿主应用的 settings.gradle
中。此示例假定 flutter_module
和 MyApp
存在于同一目录中
// Include the host app project.
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir.parentFile, // new
'flutter_module/.android/include_flutter.groovy' // new
)) // new
绑定和脚本评估允许 Flutter 模块在 settings.gradle
的评估上下文中 include
自身(作为 :flutter
)以及模块使用的任何 Flutter 插件(例如 :package_info
和 :video_player
)。
从您的应用中引入一个 implementation
依赖项,该依赖项来自 Flutter 模块
dependencies {
implementation project(':flutter')
}
您的应用现在将 Flutter 模块作为依赖项包含在内。
继续 向 Android 应用添加 Flutter 屏幕 指南。