Gradle 3.3, WireMock 2.6.0. I build my Android project by Gradle. I write my unit test by Espresso, Mockito and all work fine.
Here my build.gradle:
dependencies {
// for folder "androidTest"
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile "org.mockito:mockito-android:2.7.21"
androidTestCompile "org.powermock:powermock-api-mockito:1.6.6"
androidTestCompile 'org.powermock:powermock-module-junit4:1.6.6'
// for folder "test"
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito:1.6.6'
testCompile 'org.powermock:powermock-module-junit4:1.6.6'
}
And my project is success build and unit test success run. OK. Now I want to add WireMock unit test. So I change my build.gradle (as show this blog: http://handstandsam.com/2016/01/30/running-wiremock-on-android/):
dependencies {
// for folder "androidTest"
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile "org.mockito:mockito-android:2.7.21"
androidTestCompile "org.powermock:powermock-api-mockito:1.6.6"
androidTestCompile 'org.powermock:powermock-module-junit4:1.6.6'
//WireMock
androidTestCompile("com.github.tomakehurst:wiremock:2.6.0") {
//Using Android Version Instead
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
//Version conflict with our app's slf4j version
exclude group: 'org.slf4j', module: 'slf4j-api'
//Was getting a classpath conflict for org.objectweb.asm.AnnotationVisitor which is a part of 'net.minidev:asm'
exclude group: 'org.ow2.asm', module: 'asm'
//Was getting this warning, so decided to ignore this version included by WireMock.
//Warning:Dependency org.json:json:20090211 is ignored as it may be conflicting with the internal version provided by Android.
//In case of problem, please repackage with jarjar to change the class packages
exclude group: 'org.json', module: 'json'
}
// for folder "test"
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito:1.6.6'
testCompile 'org.powermock:powermock-module-junit4:1.6.6'
}
When I run my app all is OK. But when I try to start my instrumented unit test for Android I get the next error:
:app:compileDevAndroidTestShaders
:app:generateDevAndroidTestAssets
:app:mergeDevAndroidTestAssets
:app:transformClassesWithDexForDevAndroidTest FAILED
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':app:transformClassesWithDexForDevAndroidTest'.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
The DexIndexOverFlowException happens when a method with an index of greater than 64K (Dex Method count limit) is accessed. This means that the actual number of method counts (references) in your android project is larger than 64K and the final .dex file of your application will be splitted into multiple dex file. In this situation, you should make your application support multidex, in the following way :
1- add the multidex dependency :
compile 'com.android.support:multidex:1.0.1'
2- add the following config to app/build.gradle :
android {
defaultConfig {
multidexEnabled true
}
}
3- Create a custom application class to extend MultiDexApplication
public MyApplication extends MultiDexApplication
4- Make this custom class the entry point of your application, in the AndroidManifest.xml
:
<application
android:name=".MyApplication"