3

在我使用的 Android 项目中

compile 'com.squareup.okhttp:okhttp:2.2.0'

我需要 2.2.0 版中的 okhttp 才能使我的代码正常工作。但是当我添加时我遇到了问题

compile('io.intercom.android:intercom-sdk:1.1.2@aar') {
        transitive = true
}

因为在 intercom-sdk 内部对于更高版本再次存在 okhttp 依赖项:

compile 'com.squareup.okhttp:okhttp:2.4.0'

这导致我的代码使用更高版本的 2.4.0 而不是我想要的 2.2.0。请问有什么方法可以在我的模块中使用我指定的 2.2.0 并让对讲机使用它的 2.4.0?

4

2 回答 2

4

你可以使用这样的东西:

compile('io.intercom.android:intercom-sdk:1.1.2@aar') {
    exclude group: 'com.squareup.okhttp', module: 'okhttp'
  }

不过要注意。如果库使用 2.2.0 版本中不存在的方法,它将失败。

于 2015-07-14T09:57:31.493 回答
3

您应该定义解决策略来设置特定版本。这将保证无论传递依赖版本是什么,您都将获得所需的正确版本:

allProjects {
   configurations.all {
       resolutionStrategy {
           eachDependency { DependencyResolveDetails details ->
               if (details.requested.name == 'okhttp') {
                   details.useTarget('com.squareup.okhttp:okhttp:2.2.0')
               }
            }
        }
     }
  }

在较新版本的 Gradle 中,您可以使用:

allProjects {
   configurations.all {
       resolutionStrategy.force 'com.squareup.okhttp:okhttp:2.2.0'
     }
 }
于 2015-07-14T20:10:18.437 回答