將 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 專案目錄。
- 按一下 開啟。
如果你需要建立新的 Flutter 專案
- 完成設定對話方塊。
- 在 專案類型 功能表中,選取 模組。
按一下 完成。
不使用 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
檔案。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()
// 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 模組在你的 settings.gradle
的評估內容中 include
自己 (作為 :flutter
) 和模組使用的任何 Flutter 外掛程式 (例如 :package_info
和 :video_player
)。
更新 app/build.gradle
#從你的應用程式在 Flutter 模組上引入 implementation
依賴項
dependencies {
implementation(project(":flutter"))
}
你的應用程式現在包含 Flutter 模組作為依賴項。
繼續前往將 Flutter 畫面新增至 Android 應用程式指南。
除非另有說明,否則本網站上的文件反映 Flutter 的最新穩定版本。頁面最後更新於 2024 年 10 月 31 日。 檢視原始碼 或 回報問題。