当两个依赖项对同一个库具有内部依赖性但在Android中具有不同版本时,gradle如何解决冲突?

the*_*ger 6 android gradle android-gradle-plugin

我的应用依赖于两个库.它们都使用相同的库' 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)
Run Code Online (Sandbox Code Playgroud)

由于两个依赖项都相关Android instrumentation tests,因此应用程序构建成功,并在构建中包含更高版本 - 在本例中为1.3版.

但是,如果我将一个库用于主应用程序,而其他库用于Android Instrumentation测试,如下所示:

compile 'junit:junit:4.12'
androidTCompile 'org.mockito:mockito-core:1.10.19'
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

: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.
Run Code Online (Sandbox Code Playgroud)

所以我去了例外中给出的链接.出现这种行为的原因如下

运行检测测试时,主APK和测试APK共享相同的类路径.如果主APK和测试APK使用相同的库(例如Guava)但是在不同版本中,Gradle构建将失败.如果gradle没有捕获到,那么您的应用程序在测试期间和正常运行期间可能会有不同的行为(包括其中一个案例中的崩溃).

到目前为止,我没有任何问题,但在以下情况下我遇到了问题:

1)在下面的声明中,只创建了一个主apk,因为本地单元测试在JVM上运行,那么为什么它会因冲突的相同例外而失败

compile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
Run Code Online (Sandbox Code Playgroud)

2)如果上述情况失败,那么这也应该失败.但令人惊讶的是,这种方法很好并且构建良好.

 androidTestCompile 'junit:junit:4.12'
 testCompile 'org.mockito:mockito-core:1.10.19'
Run Code Online (Sandbox Code Playgroud)

我无法理解这种gradle解决依赖关系的模糊性Android.