android - last - Cómo configurar dagger+gradle
dagger2 gradle (3)
Tengo un proyecto y migro a la dependencia de Gradle, pero me encuentro con un problema al intentar instalar Dagger con Gradle. La primera vez que compilo funciona perfectamente (o si limpio), pero si lo intento dos veces me da un error como :
Error: (13, 14) error: clase duplicada: com.myapp.android.application.InjectingApplication $ InjectingApplicationModule $$ ModuleAdapter
Intento usar el complemento de android-apt y lo he configurado como en la documentación, pero sigo recibiendo el mismo error ( https://bitbucket.org/hvisser/android-apt/overview )
También trato de usar la dependencia provista en lugar de este tutorial ( https://github.com/frankdu/android-gradle-dagger-tutorial ) de compilación pero no hay suerte hasta ahora.
¿Tienes alguna idea de cómo configurar dagger y gradle?
EDITAR
Mi build.gradle se parece a esto
apply plugin: ''android''
apply plugin: ''android-apt''
android {
compileSdkVersion 19
buildToolsVersion "19.0.2"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
packageName "com.myapp.android"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
}
dependencies {
compile project('':volley'')
apt ''com.squareup.dagger:dagger-compiler:1.2.0''
compile ''com.squareup.dagger:dagger:1.2.0''
}
Y mi nivel superior de build.gradle se ve así
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.9.+''
classpath ''com.neenbedankt.gradle.plugins:android-apt:1.2''
}
}
allprojects {
repositories {
mavenCentral()
}
}
EDICIÓN # 2:
Lo intenté nuevamente, ya que @Marco sugirió que no hubo suerte, no sé si hay una biblioteca o una versión de gradle que pueda estar causando este problema, actualmente estoy usando 1.10. En el lado positivo encontré una manera de hacer que funcionara, pero me encantaría hacerlo simplemente agregando la declaración provista. La forma en que lo hice es la forma antigua:
Definir la configuración de apt
configurations {
apt
}
añadir lib compilador lib
apt ''com.squareup.dagger:dagger-compiler:1.2.0''
E implemente este enlace a applicationVariant que, por lo que sé, android-apt hace algo similar. ¿Esto tiene sentido? ¿por qué?
def getSourceSetName(variant) {
return new File(variant.dirName).getName();
}
android.applicationVariants.each { variant ->
def aptOutputDir = project.file("build/source/apt")
def aptOutput = new File(aptOutputDir, variant.dirName)
android.sourceSets[getSourceSetName(variant)].java.srcDirs+= aptOutput.getPath()
variant.javaCompile.options.compilerArgs += [
''-processorpath'', configurations.apt.getAsPath(),
''-s'', aptOutput
]
variant.javaCompile.source = variant.javaCompile.source.filter { p ->
return !p.getPath().startsWith(aptOutputDir.getPath())
}
variant.javaCompile.doFirst {
aptOutput.mkdirs()
}
}
Actualizar el complemento de Gradle a (root / gradle) classpath ''com.android.tools.build:gradle:2.2.0''
app / gradle
compile ''com.google.dagger:dagger:2.4''
annotationProcessor ''com.google.dagger:dagger-compiler:2.4''
Es un trabajo para mi.
Paso 1:
Añade este código a tu build.gradle
provided ''com.squareup.dagger:dagger-compiler:1.2.2''
Paso 2:
Agregue la carpeta de código fuente app/gen
a su proyecto. Así que puedes agregar este código a tu app/build.gradle
( src/main/java
es tu carpeta de código central del proyecto)
sourceSets.main {
java.srcDirs = [''src/main/java'', ''gen'']
}
Estoy usando daga en este ejemplo de ejemplos de volley . No tengo ningún problema con Dagger y estoy incluyendo el compilador usando:
provided ''com.squareup.dagger:dagger-compiler:1.2.1''