我有一个项目并迁移到gradle依赖,但我发现自己有一个问题,试图用gradle设置dagger,我第一次编译它完美工作(或者如果我清理)但是如果我尝试两次然后它给出我的错误如:
错误:(13,14)错误:重复的类:com.myapp.android.application.InjectingApplication $ InjectingApplicationModule $$ ModuleAdapter
我尝试使用android-apt插件并在文档中配置,但我仍然得到相同的错误(https://bitbucket.org/hvisser/android-apt/overview)
我也尝试使用提供的依赖,就像编译本教程(https://github.com/frankdu/android-gradle-dagger-tutorial)一样,但到目前为止还没有运气。
您对如何配置dagger和gradle有什么想法吗?
修改
我的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编译器库
apt 'com.squareup.dagger:dagger-compiler:1.2.0'
并实现对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()
}
}
答案 0 :(得分:17)
我在此示例Volley Examples中使用匕首。我没有遇到任何匕首问题,我使用的编译器包括:
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
答案 1 :(得分:0)
这对我有用。
第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']
}
答案 2 :(得分:0)
将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'