Skip to main content

在添加到应用中管理插件和依赖项

本指南介绍如何设置项目以使用插件,以及如何在现有 Android 应用和 Flutter 模块的插件之间管理 Gradle 库依赖项。

A. 简单场景

#

在简单情况下:

  • 您的 Flutter 模块使用一个没有额外 Android Gradle 依赖项的插件,因为它仅使用 Android 操作系统 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 应用中而不是在 Flutter 模块中执行这些 Android Gradle 文件编辑。

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