如何让Dagger和Butterknife与Gradle合作?

mar*_*den 7 android dagger android-studio android-gradle-plugin

我让我的项目与Butterknife一起工作,以观察注射.但是我需要添加Dagger才能注入依赖项.

我添加了Annotation Processor Tool Gradle插件以及相应的Dagger要求(为简洁起见,仅显示修改过的部分);

buildScript {
    repositories {
        maven {
            url "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        ...
        classpath 'com.jimdo.gradle:gradle-apt-plugin:0.2-SNAPSHOT'
    }
}

apply plugin: 'apt'

dependencies {
    apt "com.squareup.dagger:dagger-compiler:${daggerVersion}"

    ...
}
Run Code Online (Sandbox Code Playgroud)

此时,当我构建并运行应用程序时,标记有@InjectView注释的属性不会被注入Butterknife发出的以下调试消息;

D/ButterKnife? Looking up view injector for com.example.MainActivity
D/ButterKnife? Not found. Trying superclass com.example.FactListAbstractActivity
D/ButterKnife? Not found. Trying superclass android.app.Activity
Run Code Online (Sandbox Code Playgroud)

mar*_*den 7

事实证明我需要做的就是添加另一个apt依赖项,以便让注释处理器工具拾取包含在Butterknife中的处理器.这是将它包含为编译时依赖项的补充;

dependency {
    apt "com.jakewharton:butterknife:${butterknifeVersion}"

    compile "com.jakewharton:butterknife:${butterknifeVersion}"
}
Run Code Online (Sandbox Code Playgroud)

  • 没理由列出两次.只有`compile`声明对于Butter Knife来说已经足够了. (2认同)