Android测试:使用’gradle check connectedCheck’时’多个dex文件’

当我运行基于
android模拟器的测试:

gradlew check connectedCheck

……它失败了:

 com.android.dx.util.DexException: Multiple dex files define Lorg/hamcrest/Description;

这是我的build.gradle文件:

buildscript {
    repositories {
        mavenCentral()
        maven {
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0'
        classpath 'com.squareup.gradle:gradle-android-test-plugin:0.9.1-SNAPSHOT'
    }
}

apply plugin: 'android'
apply plugin: 'android-test'

repositories {
    mavenCentral()
    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots/'
    }
}

task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
    gradleVersion = '1.9'
}

android {
    compileSdkVersion 17
    buildToolsVersion "18.1"

    defaultConfig {
        minSdkVersion 13
        targetSdkVersion 18
    }

    sourceSets {
        instrumentTest.setRoot('src/test')
    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile fileTree(dir: 'libs', include: '*.jar')

    testCompile 'junit:junit:4.10'
    testCompile 'org.robolectric:robolectric:2.3-SNAPSHOT'
    testCompile 'com.squareup:fest-android:1.0.+'
    instrumentTestCompile 'junit:junit:4.10'
    instrumentTestCompile 'org.robolectric:robolectric:2.3-SNAPSHOT'
    instrumentTestCompile 'com.squareup:fest-android:1.0.+'
}

我正在使用Android Studio,但测试是从命令行运行的.

使用roboelectric(gradlew测试)运行基于非仿真器的测试工作正常.

我相信它是一个包含两次的jar文件,但不知道哪一个以及如何修复.
建议?

编辑

似乎是导致问题的是instrumentTestCompile’junit:junit:4.10’行.但是,当我把它拿出来时,机电测试不能编译.我该如何配置它以便我可以运行基于模拟器和基于roboeletric的测试?

最佳答案 这是因为JUnit 4.10包含了一些Hamcrest类(顽皮).它已在4.11中修复,因此只需升级即可.

点赞