两个依赖项使用相同的库但版本不同

And*_*dan 5 android gradle build.gradle android-gradle-plugin

似乎我有毕加索库,2.4.0,但 twitter 也使用库的 2.3.2 版本。我的问题是...... 2.3.2 库是否与较新版本一起下载?或者只是 2.4.0 被下载并被 twitter 使用?我应该排除 2.3.2 一个,twitter 会自动使用 2.4.0 吗?这安全吗?较新的版本可能与 twitter 库不兼容,不是吗?

我很困惑在这种情况下我应该如何进行。我应该排除哪个库(如果我可以排除一个)。

gradle -q app:dependencyInsight --dependency picasso --configuration compile

com.squareup.picasso:picasso:2.4.0 (conflict resolution)
\--- compile

com.squareup.picasso:picasso:2.3.2 -> 2.4.0
\--- com.twitter.sdk.android:tweet-ui:1.1.0
     +--- compile
     \--- com.twitter.sdk.android:twitter:1.1.1
          \--- compile

(*) - dependencies omitted (listed previously)
Run Code Online (Sandbox Code Playgroud)

Dee*_*eeV 6

根据Gradle 文档

Gradle 提供以下冲突解决策略:

最新:使用最新版本的依赖项。这是 Gradle 的默认策略,只要版本向后兼容,通常是合适的选择。

失败:版本冲突导致构建失败。此策略要求在构建脚本中明确解决所有版本冲突。有关如何明确选择特定版本的详细信息,请参阅 ResolutionStrategy。

所以 Gradle 将使用 Picasso 2.4.0 管理依赖项。

这会是一个问题吗?可能。如果 Twitter 使用从 2.3.x 更改为 2.4 的方法和/或签名,您将遇到问题。如果它们彼此向后兼容,您将不会遇到任何问题。

我现在看到Twitter SDK实际上已经将他们的 Picasso 库升级到了 2.5.2(最新的)。如果您的项目导入 Picasso,那么您也可以更新它(并且可能应该)。如果它是另一个模块的依赖项,那么您也可以更新该模块。

另一种选择是将 Picasso 降级到 2.3.2 或使用ResolutionStrategy来使用较低版本。除非你必须,否则我不会推荐这个。