Dagger 2,Gradle Plugins和Jack - 需要指导

Mar*_*een 9 android java-8 android-gradle-plugin dagger-2

我正在使用Dagger 2(DI库的第一次用户)和Android Studio(AS 2.1.2 - SDK 24),显然我的第一个想法是"为了使用它需要哪些依赖项?"

看了一些例子,我可以看到你需要在顶级build.gradle文件中需要一个注释处理器插件:

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Run Code Online (Sandbox Code Playgroud)

现在,Module关卡中的依赖项build.gradle应用了apt插件,Module所以我最终得到了类似的东西:

apply plugin: 'com.neenbedankt.android-apt'

// other generic settings - android / buildTypes etc.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    .
    .
    compile 'com.google.dagger:dagger:2.6'
    apt 'com.google.dagger:dagger-compiler:2.6'
    provided 'javax.annotation:jsr250-api:1.0'
}
Run Code Online (Sandbox Code Playgroud)


问题

在我的项目中,我一直在使用Jack Tool Chain和Java 8,发现上面的配置与Jack不兼容.

为了让Jack和Dagger 2合作,研究了我需要的东西,我改变了以下内容:

gradle-wrapper.properties:

变成 :

distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

build.gradle(顶级)

变成:

classpath 'com.google.guava:guava:19.0' // added after getting NoSuchMethod Error - it solved the issue
classpath 'com.android.tools.build:gradle:2.2.0-alpha7'
Run Code Online (Sandbox Code Playgroud)

build.gradle(模块级)

变成:

compile 'com.google.dagger:dagger:2.6'
annotationProcessor 'com.google.dagger:dagger-compiler:2.6'
Run Code Online (Sandbox Code Playgroud)

通过这些更改,我可以使用Jack工具链,并构建一个小项目.然而,在没有改变任何代码的情况下,我开始在创建组件时遇到问题 - 在一行简单的代码中:testComponent = DaggerTestComponent.builder().build();单词DaggerTestComponent变为红色(显然Dagger 2库不能正常工作).我设法通过一个好的旧的无效缓存,清理和重建来解决错误.然而,每次我尝试构建小型测试项目时,我都会遇到随机错误 - 我已经管理了几次运行应用程序(它按预期工作),但显然它非常有气质.


所以这个问题,我为此花了很长时间而道歉,但认为上述所有内容都是相关的,

是否有比我目前使用的更"稳定"的设置?还有其他人遇到过这些问题吗?

显然我不必使用Jack工具链和Java 8,但如果我不需要,我宁愿不妥协!