匕首 2:无法解析匕首组件的符号

Dagger 2 : Cannot resolve symbol for dagger component

我想练习这个 Dagger 2 Vehicle Motor 例子。

除了我的 gradel.build:

compile 'com.google.dagger:dagger:2.4'
apt 'com.google.dagger:dagger-compiler:2.4'
compile 'javax.annotation:javax.annotation-api:1.2'

但后来我得到一个

error: cannot find symbol variable Dagger_VehicleComponent

有什么问题吗?(同样没有'_'下划线)

另一个版本解决了它:

compile 'com.google.dagger:dagger:2.2'
apt 'com.google.dagger:dagger-compiler:2.2'
provided 'javax.annotation:jsr250-api:1.0'
  1. 将 Dagger_VehicleComponent 更改为 DaggerVehicleComponent
  2. 清理并重建您的项目
  3. 导入 DaggerVehicleComponent class

我花了一段时间才弄明白这一点。但我找到了原因(至少在我这边) 我从头开始创建了一个项目,之后我尝试设置基本的 components/tools 直到遇到这个问题。

阅读其他答案我发现 DaggerApplicationComponent class 是由编译器自动生成的,然后我想,为什么 IDE 不能 "find" 这个 class? 答案很明显......你明白了,是因为项目没有编译,如果场景与我的相同,这里是解决此问题的步骤。

1) 打开终端并转到您的项目路径(或者只需在 Android Studio 中打开终端)

2) 清理项目 ./gradle干净

3) 构建项目 ./gradle构建

注意:如果此时您已经注意到该项目没有编译...宾果游戏!这可能是真正的问题。然后执行以下步骤:

4) 打开 gradle 并添加 buildToolsVersion '23.0.1' 非常重要必须启用 multiDexEnabled true 这就是我的 gradle 在应用程序模块中的样子

android {
    buildToolsVersion '23.0.1' // IMPORTANT
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.fixing.dagger"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        multiDexEnabled true  // ALSO IMPORTANT
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

之后您将能够导入 DaggerApplicationComponent。

希望这能为其他人节省时间!