跳到主要內容

將 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 模組新增為依賴項。

  1. 在 Android Studio 中開啟你的 Android 專案。

  2. 前往 檔案 > 新增 > 新增專案...。「新增專案」對話方塊會顯示。

  3. 按一下 Flutter

  4. 如果要求你提供你的 Flutter SDK 路徑,請提供並按一下 下一步

  5. 完成你的 Flutter 模組的設定。

    • 如果你有現有的專案

      1. 若要選擇現有的專案,請按一下 專案位置 方塊右側的 ...
      2. 瀏覽至你的 Flutter 專案目錄。
      3. 按一下 開啟
    • 如果你需要建立新的 Flutter 專案

      1. 完成設定對話方塊。
      2. 專案類型 功能表中,選取 模組
  6. 按一下 完成

不使用 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 { } 區塊下宣告下列原始碼相容性。

MyApp/app/build.gradle
groovy
android {
    // ...
    compileOptions {
        sourceCompatibility = 11 // The minimum value
        targetCompatibility = 11 // The minimum value
    }
}

集中儲存庫設定

#

從 Gradle 7 開始,Android 建議在 settings.gradle 中使用集中式儲存庫宣告,而不是在 build.gradle 檔案中使用專案或模組層級宣告。

在嘗試將你的 Flutter 模組專案連線到你的主機 Android 應用程式之前,請進行下列變更。

  1. 移除你所有應用程式 build.gradle 檔案中的 repositories 區塊。

    groovy
    // Remove the following block, starting on the next line
        repositories {
            google()
            mavenCentral()
        }
    // ...to the previous line
  2. 將此步驟中顯示的 dependencyResolutionManagement 新增至 settings.gradle 檔案。

    groovy
    dependencyResolutionManagement {
       repositoriesMode = RepositoriesMode.PREFER_SETTINGS
       repositories {
           google()
           mavenCentral()
       }
    }

將 Flutter 模組新增為依賴項

#

將 Flutter 模組新增為 Gradle 中現有應用程式的依賴項。你可以透過兩種方式達成此目的。

  1. Android 封存 AAR 機制會建立通用的 Android AAR 作為中介,以封裝你的 Flutter 模組。當你的下游應用程式建置者不想安裝 Flutter SDK 時,這會很有用。但是,如果你經常建置,則會增加一個建置步驟。

  2. 模組原始碼 原始碼子專案機制是一個方便的一鍵建置流程,但需要 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,使其包含本機儲存庫和依賴項

settings.gradle.kts
kotlin
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {
        google()
        mavenCentral()
        maven("https://storage.googleapis.com/download.flutter.io")
    }
}
settings.gradle
groovy
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 模組包含為依賴項。

MyApp/app/build.gradle.kts
kotlin
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 檔案中實作。

host-project/app/build.gradle.kts
kotlin
configurations {
    getByName("profileImplementation") {
    }
}
MyApp/settings.gradle.kts
kotlin
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_moduleMyApp 存在於相同的目錄中

如果你使用 Kotlin,請套用下列變更

MyApp/settings.gradle.kts
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,請套用下列變更

MyApp/settings.gradle
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 依賴項

MyApp/app/build.gradle
groovy
dependencies {
    implementation(project(":flutter"))
}

你的應用程式現在包含 Flutter 模組作為依賴項。

繼續前往將 Flutter 畫面新增至 Android 應用程式指南。