Gradle y varios proyectos con Roboguice dependencia

Estoy intentando migrar un proyecto antiguo de IntelliJ para usar gradle. Sin embargo, assemblDebug falla durante el paso dx:

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) 

Mi proyecto se divide en dos subproyectos: un proyecto principal y un proyecto de biblioteca. Ambos proyectos tienen Roboguice y Guice como dependencias.

He intentado la solución propuesta por Xav para incluir la biblioteca de soporte en varios proyectos como se menciona en esta respuesta . Probablemente la solución no debería ser necesaria, dado que roboguice / guice son recogidos de maven central. He creado un proyecto de biblioteca ficticia que es el único proyecto que depende de roboguice / guice. Lo hice para que mi proyecto principal y el proyecto (verdadero) de la biblioteca dependieran de este proyecto ficticio. Sin embargo, tengo el mismo error.

¿Cómo se puede arreglar esto?

Settings.gradle en el directorio raíz:

 include 'MainApp' include 'library' include 'common-library' 

Build.gradle en el directorio raíz:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.2' } } allprojects { version = '1.0' repositories { mavenCentral() } } apply plugin: 'android-reporting' 

Build.gradle en el proyecto principal y el proyecto real de la biblioteca:

 apply plugin: 'android' android { compileSdkVersion 15 buildToolsVersion "17.0" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] } } } dependencies { compile project(':library') // only in main, not in real library compile project(':common-library') } 

Build.gradle en el proyecto de biblioteca ficticia:

 apply plugin: 'android-library' android { compileSdkVersion 15 buildToolsVersion "17.0" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] } } } dependencies { compile 'org.roboguice:roboguice:2.0' compile 'com.google.inject:guice:3.0' } 

Tienes razón de que la biblioteca ficticia no es necesaria, ya que estás utilizando Maven. Si observa el .pom para Roboguice , lista Guice como una dependencia con el clasificador "no_aop". Sin embargo, también está listando Guice explícitamente sin el clasificador. Mi conjetura es que Maven está tirando en ambas versiones, que da lugar al conflicto de la mezcla del dexing.

Intente eliminar la compile 'com.google.inject:guice:3.0' de su archivo de compilación Gradle y ver si se basa.

Ok, chicos que fundé! Para resolver este problema tiene que utilizar ' excluir módulo ' en build.gradle para library-project.

Estos son mis ejemplos: compile ('oauth.signpost: signpost-commonshttp4: 1.2.1.2') {módulo de exclusión: 'httpcore'}

  • ¿Cuáles son los beneficios específicos de usar DI en Android?
  • Android - Configuración de Roboguice 2.0?
  • Roboguice y simulacros: ¿Cómo roboguice inyectar un servicio de simulacro cuando la prueba, pero utiliza el REAL de lo contrario?
  • InjectView en RoboFragment
  • ¿Dónde se escribe la salida de registro cuando se utiliza Roboelectric + Roboguice?
  • Inyectar objetos de objetos en Class Util (usando Dagger)
  • No se puede inyectar vista a clases personalizadas con RoboGuice
  • Inyectar objeto con constructor que toma un parámetro usando RoboGuice 2
  • Android: Cómo ampliar mi clase de actividad con RoboActivity + ActionBarActivity
  • Uso de Guice para inyectar dependencias en el constructor de una actividad de Android
  • Roboguice: el uso de las inyecciones manuales causa ConfigurationException (no se ha vinculado la implementación)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.