在 add-to-app 中管理插件和依赖项
本指南介绍如何设置项目以使用插件,以及如何在现有 Android 应用和 Flutter 模块的插件之间管理 Gradle 库依赖项。
A. 简单场景
在简单情况下
- 您的 Flutter 模块使用了一个没有其他 Android Gradle 依赖项的插件,因为它只使用 Android 操作系统 API,例如相机插件。
- 您的 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'
…
}
…
您的 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 模块插件中使用相同的主要语义版本来避免编译和运行时错误。