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

时间:2016-12-13 16:22:28

标签: android gradle android-gradle build.gradle

似乎我有Picasso库,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)

1 个答案:

答案 0 :(得分:4)

根据Gradle docs

  

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来使用较低版本。除非你必须,否则我不会推荐这个。

相关问题