我的gradle文件中的这个条目:
androidTestCompile ('com.squareup.okhttp:mockwebserver:2.7.0')
抛出错误:
Warning:Conflict with dependency 'com.squareup.okio:okio'. Resolved versions for app (1.8.0) and test app (1.6.0) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
我尝试在gradle文件中注释掉不同的编译条目,找出哪一个是冲突的,但我找不到哪一个使用com.squareup.okio:okio。
更新: 我可以通过运行来获取依赖项:gradlew.bat app:dependencies> C:\ TMP \ output.txt的
+--- com.squareup.retrofit2:retrofit:2.0.0 -> 2.1.0
| \--- com.squareup.okhttp3:okhttp:3.3.0
| \--- com.squareup.okio:okio:1.8.0
--- com.squareup.okhttp:mockwebserver:2.7.0
| +--- com.squareup.okhttp:okhttp:2.7.0
| | \--- com.squareup.okio:okio:1.6.0
正如您所看到的,改造2.0使用okhttp3,它使用的是okio:1.8.0。另一方面,mockwebserver:2.7.0使用okhttp:2.7.0,它使用的是okio:1.6.0。那么我该如何解决这个问题呢?
以下是我的gradle文件的“dependencies”部分中的条目:
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.2.1'
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.+'
compile 'com.squareup.retrofit2:adapter-rxjava:2.+'
compile 'com.squareup.retrofit2:retrofit-mock:2.+'
//recycler view
compile 'com.android.support:recyclerview-v7:+'
//picasso image caching
compile 'com.squareup.picasso:picasso:2.5.2'
//jackson parser
compile (
[group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.4.1']
)
//Dagger
compile 'com.google.dagger:dagger:2.7'
apt 'com.google.dagger:dagger-compiler:2.7'
//constraint based layouts
compile 'com.android.support:design:24.1.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
//for chrome debugging
compile 'com.facebook.stetho:stetho:1.4.1'
compile 'com.facebook.stetho:stetho-okhttp3:1.4.1' //for retrofit
//RxJava
compile 'io.reactivex:rxandroid:1.2.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
compile 'io.reactivex:rxjava:1.1.6'
//--- For Testing ---
//robolectric:
testCompile "org.robolectric:robolectric:3.2.2"
//mockito
testCompile "org.mockito:mockito-core:2.+"
testCompile('org.hamcrest:hamcrest-core:1.3')
testCompile('org.hamcrest:hamcrest-library:1.3')
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
// Espresso-web for WebView support
androidTestCompile( 'com.android.support.test.espresso:espresso-web:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
androidTestCompile( 'com.android.support.test:runner:0.5', {
exclude group: 'com.android.support', module: 'support-annotations'
})
androidTestCompile( 'com.android.support.test:rules:0.5', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile ('org.powermock:powermock-api-mockito:1.6.2') {
exclude module: 'hamcrest-core'
exclude module: 'objenesis'
}
//mockwebserver
//testCompile 'com.squareup.okhttp3:mockwebserver:3.3.0'
androidTestCompile ('com.squareup.okhttp:mockwebserver:2.7.0')
androidTestCompile 'com.squareup.spoon:spoon-client:1.2.0'
答案 0 :(得分:3)
我用
解决了Retrofit version 2.3.0 -> com.squareup.retrofit2:retrofit:2.3.0
MockWebServer version 3.8.0 -> com.squareup.okhttp3:mockwebserver:3.8.0
答案 1 :(得分:0)
尝试从okio
androidTestCompile
androidTestCompile ('com.squareup.okhttp:mockwebserver:2.7.0') {
exclude module: 'com.squareup.okio'
}
答案 2 :(得分:0)
这两个版本Retrofit
和MockWebServer
的依赖关系版本排列:
com.squareup.retrofit2:retrofit:2.2.0
com.squareup.okhttp3:mockwebserver:3.6.0
我建议不要处理依赖冲突,而是建议使用这两个版本。
答案 3 :(得分:0)
运行检测测试时,主APK和测试APK共享相同的类路径。如果主APK和测试APK使用相同的库(例如Guava)但是在不同的版本中,Gradle构建将失败。如果gradle没有捕获到,那么您的应用程序在测试期间和正常运行期间可能会有不同的行为(包括其中一个案例中的崩溃)。
这意味着每个配置中的依赖关系,即compile
,androidTestCompile
& testCompile
应该是相同的版本。
更新父依赖项(retrofit
& mockwebserver
),使它们在各种配置中共享相同的子依赖项(okhttp
& okio
)。
OR
在具有最少版本的配置(compile
,androidTestCompile
或testCompile
)中明确添加依赖项。
在您的情况下,添加androidTestCompile('com.squareup.okio:okio:1.6.0')
可以解决冲突
现在,需要androidTest
的每个okio
依赖项都将使用最新版本。
注意强>
只要在同一配置中存在版本冲突,就会自动使用最新的可用依赖版本。对于跨配置的版本冲突,情况并非如此,因此出现错误。
示例 - 只要存在冲突,我的编译配置okhttp3
依赖项将替换为最新版本的3.9.0
。