在 add-to-app 中管理外掛和依賴項
瞭解如何使用外掛,並將外掛的庫依賴項共享給您現有的應用。
本指南介紹瞭如何設定您的專案以使用外掛,以及如何在現有 Android 應用和 Flutter 模組的外掛之間管理 Gradle 庫依賴項。
A. 簡單場景
#在簡單情況下
- 您的 Flutter 模組使用的外掛僅使用 Android OS API(例如相機外掛),因此沒有額外的 Android Gradle 依賴項。
- 您的 Flutter 模組使用的外掛具有 Android Gradle 依賴項(例如 來自 video_player 外掛的 ExoPlayer),但您現有的 Android 應用並不依賴 ExoPlayer。
無需進行額外操作。您的 add-to-app 模組的工作方式與純 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 可能已經有了
…
dependencies {
…
implementation("com.crashlytics.sdk.android:crashlytics:2.10.1")
…
}
…
…
dependencies {
…
implementation "com.crashlytics.sdk.android:crashlytics:2.10.1"
…
}
…
並且您的 Flutter 模組也透過 pubspec.yaml 依賴於 firebase_crashlytics
…
dependencies:
…
firebase_crashlytics: ^0.1.3
…
…
此外掛的使用透過 firebase_crashlytics v0.1.3 自身的 Gradle 檔案再次添加了 Gradle 依賴項。
…
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 庫,如下所示:
…
dependencies {
…
implementation("com.crashlytics.sdk.android:crashlytics:2.10.1")
…
}
…
…
dependencies {
…
implementation "com.google.firebase:firebase-crashlytics:17.0.0-beta03"
…
}
…
這種方法行不通,因為 Crashlytics 的 Gradle 庫 v17.0.0-beta03 和 v2.9.9 版本之間存在重大的 API 差異。
對於遵循語義化版本的 Gradle 庫,您通常可以透過在現有應用和 Flutter 模組外掛中使用相同的語義化主版本號來避免編譯和執行時錯誤。