Search code examples
androiddagger-2dagger

Dagger2 Not Generating Dagger* classes


As the title says, Dagger2 is not generating the Dagger* prefixed classes. I looked at some other similar posts here but nothing seems to work.

I cloned this repo https://github.com/ecgreb/mvpc, Invalidated the cache of Android Studio and restarted it, I deleted $Project/.gradle and $Home/.gradle/caches, Clean and Rebuild the project and still not working.

This has also happened on some projects that are using Dagger2

Am I missing something?

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'
}

The Application class.

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;
  }
}

Solution

  • If you use

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

    Then instead of

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

    do

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

    Android-apt won't work in AS 3.0 though, so you'll need annotationProcessor in place of every apt.


    If you use Kotlin, then you must replace annotationProcessor with kapt, and also add apply plugin: 'kotlin-kapt' to your build.gradle file