J'ai un projet et je migre vers Gradle dependency, mais je me trouve avec un problème en essayant de configurer poignard avec gradle, la première fois que je le compile fonctionne parfaitement (ou si je nettoie), mais si je l'essaye deux fois, cela me donne une erreur comme :
Erreur: (13, 14) erreur: classe en double: com.myapp.Android.application.InjectingApplication $ InjectingApplicationModule $$ ModuleAdapter
J'essaie d'utiliser le plugin Android-apt et de le configurer comme dans la documentation, mais j'obtiens toujours la même erreur ( https://bitbucket.org/hvisser/Android-apt/overview )
J'essaie aussi d'utiliser les dépendances fournies à la place, comme dans ce tutoriel ( https://github.com/frankdu/Android-gradle-dagger-tutorial ) de la compilation mais pas de chance jusqu'à présent.
Avez-vous des idées sur la manière de configurer le poignard et le grade?
MODIFIER
Mon build.gradle ressemble à ceci
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'
}
Et mon build.gradle de haut niveau ressemble à ceci
// 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()
}
}
EDIT # 2:
J'ai de nouveau essayé de fournir, car @Marco m'a suggéré de ne pas avoir de chance. Je ne sais pas s'il existe une bibliothèque ou une version de Gradle pouvant être à l'origine de ce problème. J'utilise actuellement la version 1.10. Du bon côté des choses, j’ai trouvé un moyen de le faire fonctionner, mais j’aimerais le faire en ajoutant simplement la déclaration fournie. La façon dont je l'ai fait est l'ancienne:
Définir la configuration apt
configurations {
apt
}
ajouter le compilateur Dagger lib
apt 'com.squareup.dagger:dagger-compiler:1.2.0'
Et implémentez ce crochet dans applicationVariant qui, autant que je sache, Android-apt fait quelque chose de similaire. Est-ce que ça a du sens? Pourquoi?
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()
}
}
J'utilise un poignard dans cet exemple Exemples Volley . Je n'ai aucun problème avec le poignard et j'inclus le compilateur en utilisant:
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
C'est un travail pour moi.
Étape 1:
Ajoutez ce code à votre build.gradle
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
Étape 2:
Ajoutez le dossier de code source app/gen
à votre projet. Ainsi, vous pouvez ajouter ce code à votre app/build.gradle
(src/main/Java
est votre dossier de code principal)
sourceSets.main {
Java.srcDirs = ['src/main/Java', 'gen']
}
Mettre à jour le plugin Gradle en (racine/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'