Sto provando a migrare un vecchio progetto IntelliJ per usare gradle. Tuttavia, assembleDebug fallisce durante la fase di dx:Gradle e più progetti con dipendenza Roboguice
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)
Il mio progetto è suddiviso in due sottoprogetti: un progetto principale e un progetto di libreria. Entrambi questi progetti hanno Roboguice e Guice come dipendenze.
Ho provato la soluzione suggerita da Xav per includere la libreria di supporto in più progetti come indicato in this answer. Probabilmente la soluzione non dovrebbe nemmeno essere necessaria, dato che roboguice/guice vengono entrambi prelevati da Maven Central. Ho creato un progetto di libreria fittizio che è l'unico progetto che dipende da roboguice/guice. Ho fatto in modo che il mio progetto principale e il (vero) progetto della biblioteca dipendessero entrambi da questo progetto fittizio. Tuttavia, ottengo lo stesso errore.
Come può essere risolto?
settings.gradle nella directory principale:
include 'MainApp'
include 'library'
include 'common-library'
build.gradle nella directory principale:
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 nel progetto principale e la vera progetto di 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 nel progetto libreria di manichino:
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'
}
Grazie, che ha funzionato. Non ricordo bene perché ho sentito di dover aggiungere guizzi alle dipendenze. – Hrushikesh