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'}

  • ¿Tiene sentido usar Guice para Android
  • OnViewCreated con la biblioteca de compatibilidad
  • No se puede inyectar vista a clases personalizadas con RoboGuice
  • ¿Qué hace a Guice incapaz de funcionar en Android excepto como Guice-no-aop?
  • RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector
  • No se puede inyectar valor nulo en la clase
  • Uso de RoboFragment con FragmentManager
  • Inyectar objetos de objetos en Class Util (usando Dagger)
  • Inyectar objeto con constructor que toma un parámetro usando RoboGuice 2
  • Robolectric + PowerMock + Mockito no funciona
  • InjectView en RoboFragment
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.