我的应用程序依赖于两个库。它们都使用相同的库“ org.hamcrest:hamcrest-core ”,但内部使用不同的版本。
androidTestCompile 'junit:junit:4.12' //(Depends on version 1.3)
androidTestCompile 'org.mockito:mockito-core:1.10.19' //(Depends on version 1.1)
由于两个依赖项都与Android instrumentation tests
相关,因此应用程序构建成功,并在构建中包含更高版本 - 在本例中为1.3版。
但是,如果我将一个库用于主应用程序,而其他库用于Android Instrumentation测试,则如下所示:
compile 'junit:junit:4.12'
androidTCompile 'org.mockito:mockito-core:1.10.19'
我收到以下错误。
:app:prepareDebugAndroidTestDependencies
Conflict with dependency 'org.hamcrest:hamcrest-core'. Resolved versions for app (1.3) and test app (1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:prepareDebugAndroidTestDependencies'.
> Dependency Error. See console for details.
所以我去了异常中给出的链接。出现这种行为的原因如下
运行检测测试时,主APK和测试APK共享相同的类路径。如果主APK和测试APK使用相同的库(例如Guava)但是在不同的版本中,Gradle构建将失败。如果gradle没有捕获到,那么您的应用程序在测试期间和正常运行期间可能会有不同的行为(包括在其中一个案例中崩溃)。
到目前为止,我没有任何问题,但在以下情况下我遇到了问题:
1)在下面的声明中,只创建了一个主apk,因为本地单元测试在JVM上运行,那么为什么这会以相同的冲突异常失败
compile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
2)如果上述情况失败,那么这也应该失败。但令人惊讶的是,这种方法很好并且构建良好。
androidTestCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
我无法理解gradle
在Android
中解决依赖关系的这种含糊不清的性质。