如何在Android Studio Java库项目中使用Dagger 2?

3

我有一个应用程序模块(即我的应用程序)和一个名为api的Java库项目模块。我想在api模块中使用dagger 2,但注释处理器不起作用,dagger前缀类(例如DaggerApiComponent)未像预期那样生成。非常感谢任何帮助,并且是的,我正在使用gradle。


我不确定,但也许这是你的问题:https://bitbucket.org/hvisser/android-apt/issues/18/support-java-plugin 看起来 android-apt 插件(它被 Dagger 用于基于注解生成代码)仅适用于 Android 模块。 - micha
是的,那么为什么要称dagger 2为Java库呢?无论如何,我接近找到答案了,一旦找到,我会发布一个答案。 - Bhargav
我花了好几个小时来解决这个问题,但一直无法解决。直到我切换到 Project 视图并发现生成的类在 release 构建类型下时,问题才得以解决。切换到 release 构建类型后,一切都神奇地开始正常工作了。我还使用了新版本构建工具中更新的 annotationProcessor - Hossain Khan
1个回答

9
最终我成功修复了这个问题,gradle的android-apt插件只能在使用 apply plugin: 'com.android.application' 插件时才可用。因此,在Java库中无法使用 com.android.application 插件时,您需要使用插件 apply plugin: "net.ltgt.apt"。应用此插件后,您可以在依赖项块中使用dagger的编译器依赖项的apt配置 apt "com.google.dagger:dagger-compiler:2.0.2"。此外,您需要 apply plugin: "idea" 使 net.ltgt.apt 正常工作,如果不应用idea插件,则注释处理器会生成dagger工厂类,但不会包含在IDE的sourceSet中,所以不要忘记应用idea插件。因此,我的构建脚本最终看起来像这样:
buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.6"
    }
}
apply plugin: 'java'
apply plugin: "net.ltgt.apt"
apply plugin: "idea"

dependencies {
    // Dagger 2 and Compiler
    compile 'com.google.dagger:dagger:2.0.2'
    apt "com.google.dagger:dagger-compiler:2.0.2"
}

1
非常感谢!在这个问题上浪费了好几天的时间! - JenniferG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接