Android 如何配置dagger+;格拉德尔
我有一个项目,正在迁移到gradle dependency,但是我发现自己在尝试使用gradle设置dagger时遇到了一个问题,第一次编译时它工作得很好(或者如果我清理了),但是如果我尝试两次,它会给我带来如下错误: 错误:(13,14)错误:重复类:com.myapp.android.application.InjectingApplication$InjectingApplicationModule$$moduledapter 我尝试使用android apt插件,并按照文档中的配置进行配置,但仍然出现相同的错误() 我还尝试使用提供的依赖项来代替编译的本教程()中的依赖项,但到目前为止运气不佳 你知道如何配置dagger和gradle吗 编辑 我的身材,格雷德尔看起来像这样Android 如何配置dagger+;格拉德尔,android,gradle,dagger,Android,Gradle,Dagger,我有一个项目,正在迁移到gradle dependency,但是我发现自己在尝试使用gradle设置dagger时遇到了一个问题,第一次编译时它工作得很好(或者如果我清理了),但是如果我尝试两次,它会给我带来如下错误: 错误:(13,14)错误:重复类:com.myapp.android.application.InjectingApplication$InjectingApplicationModule$$moduledapter 我尝试使用android apt插件,并按照文档中的配置进行配
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时,一些生成的类成为了我后来在检查每个包时发现的真实包的一部分