Android 在不使用多重索引的情况下使用Robolectric?

Android 在不使用多重索引的情况下使用Robolectric?,android,gradle,robolectric,dex,robolectric-gradle-plugin,Android,Gradle,Robolectric,Dex,Robolectric Gradle Plugin,我正在开发一个Android应用程序,我想使用Robolectric进行测试 我遇到的主要问题是,每当我在gradle.build文件中包含Robolectric(和一些其他测试库)时,我都会得到Dex错误,因此我需要启用多重索引库(我在Android 4.4上工作) 正因为如此,我再也无法编译了,它花费的时间太长了。如果没有Robolectric和multidex,编译可能需要一分钟,如果包含Robolectric和multidex,超过30分钟我就什么也看不到了 这是我完整的gradle文件

我正在开发一个Android应用程序,我想使用Robolectric进行测试

我遇到的主要问题是,每当我在gradle.build文件中包含Robolectric(和一些其他测试库)时,我都会得到Dex错误,因此我需要启用多重索引库(我在Android 4.4上工作)

正因为如此,我再也无法编译了,它花费的时间太长了。如果没有Robolectric和multidex,编译可能需要一分钟,如果包含Robolectric和multidex,超过30分钟我就什么也看不到了

这是我完整的gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "cm.smobilpay.testapp"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            testCoverageEnabled true
            multiDexEnabled true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            testCoverageEnabled false
        }
    }

    productFlavors {
        unitTest // Creates a new scope which wraps only unit tests
    }

    sourceSets {
        unitTest {
            java {
                srcDir 'src/test/java' // New scope includes our unit test folder
            }
        }
    }

    // Prevent conflicts between Robolectric's dependencies
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'LICENSE.txt'
        exclude 'LICENSE'
    }

    lintOptions {
        abortOnError false
        xmlReport true
    }

}

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name:'s3papiandroidclient', ext:'aar')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'joda-time:joda-time:2.8.1'
    compile 'com.android.support:multidex:1.0.0'


    // Unit testing dependencies
    testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
    testCompile group: 'junit', name: 'junit-dep', version: '4.10'
    testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'

    unitTestCompile('org.robolectric:robolectric:3.0-rc3') {
        exclude module: 'classworlds'
        exclude module: 'commons-logging'
        exclude module: 'httpclient'
        exclude module: 'maven-artifact'
        exclude module: 'maven-artifact-manager'
        exclude module: 'maven-error-diagnostics'
        exclude module: 'maven-model'
        exclude module: 'maven-project'
        exclude module: 'maven-settings'
        exclude module: 'plexus-container-default'
        exclude module: 'plexus-interpolation'
        exclude module: 'plexus-utils'
        exclude module: 'wagon-file'
        exclude module: 'wagon-http-lightweight'
        exclude module: 'wagon-provider-api'
    }
}

我的问题是:在将Robolectric包含到我的项目中时,我做错了什么使我被迫使用multidex?

Robolectric不应该包含在您的dex中。Robolectric测试在JVM上运行,但不会部署在设备上

您应该将其包含在
testCompile
中,如中所述


我很惊讶修复它是多么容易。。。我遵循一个指南,将我的Android项目与Robolectric和Jenkins进行了完全集成,看起来unitTest的味道把一切都搞砸了。我完全删除了它,也删除了dexing,现在它可以很好地用于测试和编译。荣誉别担心。gradle对robolectric的支持并不总是这么简单。
testCompile "org.robolectric:robolectric:3.0"