在 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 模块插件中使用相同的语义化主版本号来避免编译和运行时错误。