Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何配置dagger+;格拉德尔_Android_Gradle_Dagger - Fatal编程技术网

Android 如何配置dagger+;格拉德尔

Android 如何配置dagger+;格拉德尔,android,gradle,dagger,Android,Gradle,Dagger,我有一个项目,正在迁移到gradle dependency,但是我发现自己在尝试使用gradle设置dagger时遇到了一个问题,第一次编译时它工作得很好(或者如果我清理了),但是如果我尝试两次,它会给我带来如下错误: 错误:(13,14)错误:重复类:com.myapp.android.application.InjectingApplication$InjectingApplicationModule$$moduledapter 我尝试使用android apt插件,并按照文档中的配置进行配

我有一个项目,正在迁移到gradle dependency,但是我发现自己在尝试使用gradle设置dagger时遇到了一个问题,第一次编译时它工作得很好(或者如果我清理了),但是如果我尝试两次,它会给我带来如下错误:

错误:(13,14)错误:重复类:com.myapp.android.application.InjectingApplication$InjectingApplicationModule$$moduledapter

我尝试使用android apt插件,并按照文档中的配置进行配置,但仍然出现相同的错误()

我还尝试使用提供的依赖项来代替编译的本教程()中的依赖项,但到目前为止运气不佳

你知道如何配置dagger和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'
}
// 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()
    }
}
我的顶级身材,格雷德尔看起来像这样

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

我再次尝试使用provided,因为@Marco表示没有运气,我不知道是否有库或gradle版本可能导致此问题,我目前使用的是1.10。从好的方面来说,我确实找到了一种方法让它发挥作用,但我很想通过添加提供的语句来实现这一点。我的做法是老办法:

定义apt配置

configurations {
     apt
}
添加Dagger编译器库

apt 'com.squareup.dagger:dagger-compiler:1.2.0'
并实现这个钩子到应用程序的变体,据我所知,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()
    }
}

我在这个样本中使用匕首。我没有遇到dagger的任何问题,我正在使用以下方法包括编译器:

provided 'com.squareup.dagger:dagger-compiler:1.2.1'
这是我的工作

步骤1:
将此代码添加到您的
build.gradle

provided 'com.squareup.dagger:dagger-compiler:1.2.2'
第二步:
将源代码文件夹
app/gen
添加到项目中。因此,您可以将此代码添加到您的
app/build.gradle
src/main/java
是您的项目核心代码文件夹)

将Gradle插件更新为(root/Gradle) classpath'com.android.tools.build:gradle:2.2.0'

应用程序/梯度

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

你能分享你的build.gradle来验证你的安卓apt和你的依赖项是如何设置的吗?实际上,对于Dagger,你不再需要安卓apt了。您是否可以尝试在
提供的
中设置
匕首编译器
,而不是
编译
。另外,dagger的最新版本是1.2.1,可能这是一个dagger bug,现在已经修复。我尝试用provided进行设置,但没有这样的运气,您是否建议立即使用provided?我建议为生成代码的处理器提供,您不必在自己的代码中引用这些代码
android apt
对于您确实需要引用生成代码的情况,例如在使用android注释时,或者对于“纯java”(非android)上的解决方案,这是正确的做法。虽然Hugo Visser的apt插件在编译时为我生成主要源代码起作用,但它无法生成测试源代码,我得到MyModule类的
模块适配器无法加载。请确保为该模块运行了代码生成。
这篇博客文章提供了一些更深入的见解:顺便说一句,当我将项目从eclipse迁移到gradle时,一些生成的类成为了我后来在检查每个包时发现的真实包的一部分