將 Flutter 模組整合到您的 Android 專案中
Flutter 可以逐個部分嵌入到您現有的 Android 應用程式中,作為原始碼 Gradle 子專案或作為 AAR。
可以使用 Android Studio IDE 和 Flutter 外掛 或手動執行整合流程。
整合您的 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 專案目錄。
- 點選 Open。
如果您需要建立一個新的 Flutter 專案
- 完成配置對話方塊。
- 在 **專案型別** 選單中,選擇 **模組**。
點選 Finish(完成)。
不使用 Android Studio 進行整合
#要手動將 Flutter 模組整合到現有的 Android 應用中,而不使用 Flutter 的 Android Studio 外掛,請按照以下步驟操作:
建立 Flutter 模組
#假設您有一個現有的 Android 應用位於 some/path/MyApp,並且您希望您的 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塊。groovy// 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)
val storageUrl: String = System.getenv("FLUTTER_STORAGE_BASE_URL") ?: "https://storage.googleapis.com"
repositories {
google()
mavenCentral()
maven("$storageUrl/download.flutter.io")
}
}dependencyResolutionManagement {
repositoriesMode = RepositoriesMode.PREFER_SETTINGS
String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
repositories {
google()
mavenCentral()
maven {
url = uri("$storageUrl/download.flutter.io")
}
}
}將 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然後,請按照螢幕上的說明進行整合。

具體來說,此命令(預設情況下建立所有 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()
maven("https://storage.googleapis.com/download.flutter.io")
}
}dependencyResolutionManagement {
repositoriesMode = RepositoriesMode.PREFER_SETTINGS
repositories {
google()
mavenCentral()
// Add the new repositories starting on the next line...
maven {
url = uri("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 = uri("https://storage.googleapis.com/download.flutter.io")
}
// ...to before this line
}
}基於 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 是一個自定義 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 才能構建宿主應用。
更新 settings.gradle
#在宿主應用的 settings.gradle 中包含 Flutter 模組作為子專案。此示例假設 flutter_module 和 MyApp 存在於同一目錄中。
如果您正在使用 Kotlin,請應用以下更改:
// Include the host app project. Assumed existing content.
include(":app")
// Replace "flutter_module" with whatever package_name you supplied when you ran:
// `$ flutter create -t module [package_name]
val filePath = settingsDir.parentFile.toString() + "/flutter_module/.android/include_flutter.groovy"
apply(from = File(filePath))如果您正在使用 Groovy,請應用以下更改:
// Include the host app project.
include(":app") // assumed existing content
setBinding(new Binding([gradle: this])) // new
def filePath = settingsDir.parentFile.toString() + "/flutter_module/.android/include_flutter.groovy" // new
apply from: filePath // new繫結和指令碼評估允許 Flutter 模組將其自身(作為 :flutter)以及模組使用的任何 Flutter 外掛(例如 :package_info 和 :video_player)include 到您的 settings.gradle 的評估上下文中。
更新 app/build.gradle
#在您的應用中引入對 Flutter 模組的 implementation 依賴項。
dependencies {
implementation(project(":flutter"))
}您的應用現在已包含 Flutter 模組作為依賴項。
繼續閱讀 將 Flutter 螢幕新增到 Android 應用 指南。