web-dev-qa-db-fra.com

Comment configurer dague + gradle

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()
    }
}
18
Necronet

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'
17
Marco RS

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']
}
0
xiezefan

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'
0
Sam