Dagger2不生成Dagger *类

时间:2016-11-18 17:17:54

标签: android dagger-2 dagger

正如标题所说,Dagger2没有生成Dagger *前缀类。我在这里看了一些其他类似的帖子,但似乎没什么用。

我克隆了这个仓库https://github.com/ecgreb/mvpc,使Android Studio的缓存无效并重新启动它,我删除了$Project/.gradle$Home/.gradle/caches,清理并重建项目但仍无法正常工作。

在一些使用Dagger2

的项目中也发生了这种情况

我错过了什么吗?

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

android {
  compileSdkVersion 24
  buildToolsVersion "24.0.3"

  defaultConfig {
    applicationId "com.example.ecgreb.mvpc"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
  }
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

tasks.withType(Test) {
  testLogging {
    exceptionFormat "full"
    events "started", "skipped", "passed", "failed"
    showStandardStreams true
  }
}

repositories {
  mavenCentral()
}

dependencies {
  compile 'com.android.support:appcompat-v7:24.2.1'
  compile 'com.android.support:design:24.2.1'

  compile "com.google.dagger:dagger:2.7"
  annotationProcessor "com.google.dagger:dagger-compiler:2.7"
  provided 'javax.annotation:jsr250-api:1.0'

  testCompile 'junit:junit:4.12'
  testCompile 'org.mockito:mockito-core:1.10.19'
  testCompile 'org.assertj:assertj-core:1.7.1'
  testCompile 'org.robolectric:robolectric:3.1.2'
  testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1'
}

应用程序类。

package com.example.ecgreb.mvpc;

import android.app.Application;

import com.example.ecgreb.mvpc.controller.LoginActivity;

import javax.inject.Singleton;

import dagger.Component;
public class MvpcApplication extends Application {

  @Singleton @Component(modules = { LoginModule.class }) public interface ApplicationComponent {
    void inject(LoginActivity loginActivity);
  }

  private ApplicationComponent component;

  @Override public void onCreate() {
    super.onCreate();
    //DaggerApplicationComponent IS NOT BEING GENERATED
    component = DaggerApplicationComponent.builder().build();
  }

  public ApplicationComponent component() {
    return component;
  }
}

2 个答案:

答案 0 :(得分:15)

如果您使用

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

然后代替

 annotationProcessor "com.google.dagger:dagger-compiler:2.7"

DO

 apt "com.google.dagger:dagger-compiler:2.7"

Android-apt虽然不能在AS 3.0中使用,但您需要annotationProcessor来代替apt

如果您使用Kotlin,则必须将annotationProcessor替换为kapt,并将apply plugin: 'kotlin-kapt'添加到build.gradle文件

答案 1 :(得分:0)

对于在项目中使用Jack Compiler时遇到此类问题的任何人,您可能已经看到没有一个解决方案可以工作,原因与Dagger2本身有关。最新版本与Jack不兼容,我的经理让它在Dagger2的2.2版本之前工作。