本指南將介紹如何設定專案以使用外掛,以及如何在現有的 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 模組外掛中使用相同的頂級語義版本來避免編譯和執行時錯誤。