Question

I am using android studio with gradle build tool.I am trying use RoboGuice for dependency injection. Here is my builde.gradle confoguration

   buildscript {
    repositories {
        mavenCentral()
        maven { url 'http://repo1.maven.org/maven2' }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

    apply plugin: 'android'

    repositories{
    mavenCentral()
}


    android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 16
    }
}

    dependencies {
    compile 'com.android.support:support-v4:13.0.0'
    compile 'org.roboguice:roboguice:2.0'
    compile 'com.google.inject:guice:3.0'
    compile 'com.google.code.findbugs:jsr305:1.3.9'
    compile 'com.j256.ormlite:ormlite-android:4.46'
    compile 'com.j256.ormlite:ormlite-core:4.46'
}

These are the logs when i am trying to build

 UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/google/inject/AbstractModule;
        at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
        at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
        at com.android.dx.command.dexer.Main.processClass(Main.java:490)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
        at com.android.dx.command.dexer.Main.access$400(Main.java:67)
        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
        at com.android.dx.command.dexer.Main.processOne(Main.java:422)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
        at com.android.dx.command.dexer.Main.run(Main.java:209)
        at com.android.dx.command.dexer.Main.main(Main.java:174)
        at com.android.dx.command.Main.main(Main.java:91)
Was it helpful?

Solution

roboguice have a dependency to guice (I think it is version 2.0). You have to exclude this transitive dependency since you already have guice-3.0 as a compile dependency.

To exclude guice from transitive dependencies put this in your dependencies :

dependencies {
   ...
   compile ('org.roboguice:roboguice:2.0') {
      exclude module: 'guice'
   }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top