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.
- Android y RoboGuice - Inyectar vistas en Fragmento?
- Android Roboguice proguard warning
- ¿Cómo se inyecta impl de alguna interfaz en una actividad de Android utilizando Guice
- ORMLite para Android: enlazar DAO con Roboguice
- Mantenga la clase anotada en Proguard
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' }
- Uso de Guice para inyectar dependencias en el constructor de una actividad de Android
- Roboguice 2.0 inyecta la aplicación en POJO
- Liberando el ayudante de ORMLite en @Singleton
- Cómo utilizar RoboDialogFragment con un diseño personalizado
- ¿Utilizando Inyección de Dependencia con Roboguice?
- Los objetos inyectados se convirtieron en nulos después de actualizar a Roboguice 3
- Android - Configuración de Roboguice 2.0?
- ¿Dónde se escribe la salida de registro cuando se utiliza Roboelectric + Roboguice?
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