Подтвердить что ты не робот

Как настроить кинжал + gradle

У меня есть проект и переход на зависимость gradle, но я обнаруживаю, что проблема связана с настройкой кинжала с помощью gradle, когда я скомпилирую его, отлично (или если я чистку), но если я попробую дважды, то это дает мне ошибку, например:

Ошибка: (13, 14) error: duplicate class: com.myapp.android.application.InjectingApplication $InjectingApplicationModule $$ ModuleAdapter

Я пытаюсь использовать плагин android-apt и настроен как в документации, но я все равно получаю ту же ошибку (https://bitbucket.org/hvisser/android-apt/overview)

Я также пытаюсь использовать предоставленную зависимость вместо этого, как в этом уроке (https://github.com/frankdu/android-gradle-dagger-tutorial), но пока не повезло.

Есть ли у вас какие-либо идеи по настройке кинжала и gradle?

ИЗМЕНИТЬ

My build.gradle выглядит так

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'
}

И мой верхний уровень build.gradle выглядит так

// 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()
    }
}

ИЗМЕНИТЬ № 2:

Я попробовал с предоставленным снова, поскольку @Marco не повезло, я не знаю, есть ли библиотека или версия gradle, которые могут вызвать эту проблему, я в настоящее время использую 1.10. С яркой стороны я нашел способ заставить его работать, но я хотел бы сделать это, просто добавив предоставленное выражение. То, как я это делал, - это старый способ:

Определить конфигурацию apt

configurations {
     apt
}

добавить компилятор Dagger lib

apt 'com.squareup.dagger:dagger-compiler:1.2.0'

И реализовать этот hook для applicationVariant, который, насколько я знаю, android-apt делает что-то подобное. Имеет ли это смысл? почему?

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()
    }
}
4b9b3361

Ответ 1

Я использую кинжал в этом примере Примеры волейбола. Я не испытываю никаких проблем с кинжалом, и я включаю компилятор, используя:

provided 'com.squareup.dagger:dagger-compiler:1.2.1'

Ответ 2

Это работа для меня.

Шаг 1:
Добавьте этот код к вам build.gradle

provided 'com.squareup.dagger:dagger-compiler:1.2.2'

Шаг 2:
Добавьте исходный код папки app/gen к проекту. Таким образом, вы можете добавить этот код к вам app/build.gradle (src/main/java - это папка основного кода проекта)

sourceSets.main {
    java.srcDirs = ['src/main/java', 'gen']
}

Ответ 3

Обновить плагин Gradle до (root/gradle) classpath 'com.android.tools.build: gradle:2.2.0'

приложение/gradle

compile 'com.google.dagger:dagger:2.4'
annotationProcessor 'com.google.dagger:dagger-compiler:2.4'