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

时间:2014-01-10 09:59:49

标签: android gradle

当我使用:

运行基于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 test)运行基于非模拟器的测试工作正常。

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

修改

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

1 个答案:

答案 0 :(得分:2)

这是因为JUnit 4.10包含一些Hamcrest类(顽皮)。它已在4.11中修复,因此只需升级。