在新增到應用場景中管理外掛和依賴項
本指南將介紹如何設定專案以使用外掛,以及如何在現有的 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 可能已經包含
…
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.google.firebase:firebase-crashlytics:17.0.0-beta03")
…
}
…此方法不起作用,因為 Crashlytics 的 Gradle 庫版本 v17.0.0-beta03 和 v2.9.9 之間存在主要的 API 差異。
對於遵循語義版本控制的 Gradle 庫,您通常可以透過在您的現有應用和 Flutter 模組外掛中使用相同的頂級語義版本來避免編譯和執行時錯誤。