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.
- Los objetos inyectados se convirtieron en nulos después de actualizar a Roboguice 3
- ¿Tiene sentido usar Guice para Android
- Roboguice, AndroidAnnotations y eventos entre hilos
- Liberando el ayudante de ORMLite en @Singleton
- Maven + RoboGuice + ActionBarSherlock + RoboGuice-Sherlock
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' }
- Android y RoboGuice - Inyectar vistas en Fragmento?
- RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector
- ORMLite para Android: enlazar DAO con Roboguice
- Roboguice 2.0 inyecta la aplicación en POJO
- Proceso se bloquea durante la creación del inyector de RoboGuice, si hay una instancia burlada en cualquier módulo
- ¿Qué hace a Guice incapaz de funcionar en Android excepto como Guice-no-aop?
- ¿Utilizando Inyección de Dependencia con Roboguice?
- Deserializando un tipo genérico con Jackson
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'}
- Ocultar el botón y mostrar de nuevo en el tacto
- La mejor manera para que el Servicio inicie Actividad para comunicarse con ella