跳至主要內容

在「加入現有應用程式」中管理插件和依賴項

本指南說明如何設定您的專案以使用插件,以及如何在您現有的 Android 應用程式和 Flutter 模組的插件之間管理您的 Gradle 函式庫依賴項。

A. 簡單情境

#

在簡單的情況下

  • 您的 Flutter 模組使用一個沒有額外 Android Gradle 依賴項的插件,因為它僅使用 Android OS API,例如相機插件。
  • 您的 Flutter 模組使用一個具有 Android Gradle 依賴項的插件,例如 來自 video_player 插件的 ExoPlayer,但您現有的 Android 應用程式並未依賴 ExoPlayer。

不需要額外的步驟。您的「加入現有應用程式」模組將以與完整 Flutter 應用程式相同的方式運作。無論您是使用 Android Studio、Gradle 子專案或 AAR 進行整合,遞移的 Android Gradle 函式庫都會根據需要自動捆綁到您外部現有的應用程式中。

B. 需要專案編輯的插件

#

某些插件需要您對專案的 Android 端進行一些編輯。

例如,firebase_crashlytics 插件的整合說明需要手動編輯您的 Android 包裝專案的 build.gradle 檔案。

對於完整的 Flutter 應用程式,這些編輯是在您的 Flutter 專案的 /android/ 目錄中完成的。

在 Flutter 模組的情況下,您的模組專案中只有 Dart 檔案。請在您外部、現有的 Android 應用程式上執行這些 Android Gradle 檔案編輯,而不是在您的 Flutter 模組中執行。

C. 合併函式庫

#

需要稍微注意的情境是,如果您現有的 Android 應用程式已經依賴於您的 Flutter 模組(透過插件遞移地)所依賴的同一個 Android 函式庫。

例如,您現有的應用程式的 Gradle 可能已經有

ExistingApp/app/build.gradle
groovy

dependencies {

    implementation("com.crashlytics.sdk.android:crashlytics:2.10.1")

}

而且您的 Flutter 模組也透過 pubspec.yaml 依賴於 firebase_crashlytics

flutter_module/pubspec.yaml
yaml

dependencies:

  firebase_crashlytics: ^0.1.3

這個插件的使用會再次透過 firebase_crashlytics v0.1.3 自己的 Gradle 檔案 遞移地新增一個 Gradle 依賴項

"firebase_crashlytics_via_pub/android/build.gradle
groovy

dependencies {

    implementation("com.crashlytics.sdk.android:crashlytics:2.9.9")

}

兩個 com.crashlytics.sdk.android:crashlytics 依賴項的版本可能不同。在此範例中,主機應用程式要求 v2.10.1,而 Flutter 模組插件要求 v2.9.9。

預設情況下,Gradle v5 會透過使用函式庫的最新版本來解決依賴項版本衝突

只要版本之間沒有 API 或實作的重大變更,這通常是可以的。例如,您可能會在您現有的應用程式中使用新的 Crashlytics 函式庫,如下所示

ExistingApp/app/build.gradle
groovy

dependencies {

    implementation("com.google.firebase:firebase-crashlytics:17.0.0-beta03")

}

此方法行不通,因為 Crashlytics 的 Gradle 函式庫版本 v17.0.0-beta03 和 v2.9.9 之間存在主要的 API 差異。

對於遵循語意版本控制的 Gradle 函式庫,您通常可以在現有的應用程式和 Flutter 模組插件中使用相同的主要語意版本,來避免編譯和執行階段錯誤。