36

With dagger 2.10 I used to be able to create the app component by doing

    sAppComponent = DaggerAppComponent.builder()
            .appModule(new AppModule(this))
            .sessionModule(new SessionModule())
            .netModule(new NetModule())
            .dataModule(new DataModule())
            .build();

I was already using the AndroidInjector for Activities and everything was fine. Now I switched to 2.11 and I can't find the way to create the app component. In the google tutorial I see:

DaggerYourApplicationComponent.create()
    .inject(this);

to be added in the onCreate of the Application. In my case DaggerYourApplicationComponent = DaggerAppComponent. The problem is that DaggerAppComponent class isn't created anymore.

I have:

public class App extends android.support.multidex.MultiDexApplication implements HasActivityInjector {
    @Inject DispatchingAndroidInjector<Activity> mDispatchingActivityInjector;
    @Override
    public void onCreate() {
        super.onCreate();

        sAppComponent = DaggerAppComponent.create().inject(this); //here the error

and:

@Singleton
@Component(modules = {
        AppModule.class,
        MainActivityModule.class,
        ...
})
public interface AppComponent {
        void inject(App app);
        ...
}

in the build.gradle file I have:

def daggerVer = 2.11
compile "com.google.dagger:dagger:$daggerVer"
compile "com.google.dagger:dagger-android-support:$daggerVer"
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVer"
kingston
  • 11,053
  • 14
  • 62
  • 116

4 Answers4

66

With the dependencies listed below everything works:

If you are using Kotlin

apply plugin: 'kotlin-kapt'

dependencies {
    def daggerVer = 2.27 // or latest version

    implementation "com.google.dagger:dagger:$daggerVer"
    implementation "com.google.dagger:dagger-android-support:$daggerVer"
    kapt "com.google.dagger:dagger-android-processor:$daggerVer"
    kapt "com.google.dagger:dagger-compiler:$daggerVer"
}

If you are using Java:

dependencies {
    def daggerVer = 2.27 // or latest version

    implementation "com.google.dagger:dagger:$daggerVer"
    implementation "com.google.dagger:dagger-android-support:$daggerVer"
    annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVer"
    annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer"
}

See google tutorial

You can find the latest release number here.

kingston
  • 11,053
  • 14
  • 62
  • 116
  • 3
    Did this and refuses to see it. clean, cleanBuildCache, nothing is working. – JPM Feb 26 '18 at 17:18
  • @JPM are you using kotlin? – kingston Feb 27 '18 at 11:46
  • yes using dagger. Turns out it was due to Inject on fields still showing fields as private. I added JvmField annotation and that went away then. – JPM Mar 01 '18 at 22:59
  • Solved my problem. Use `kapt` instead of `annotationProcessor` as suggested on Dagger 2 GitHub page. – Jack Guo Jun 26 '18 at 18:33
  • Had this thing disturbing me for 24 hours. I'm developing my app in both Kotlin and Java. When I added 'kapt' next to the annotationProcssors counterparts and it worked. – Denny Aug 31 '18 at 12:01
  • @Denny you should not need to add both even if you are using java and kotlin. kapt should be enough – kingston Aug 31 '18 at 15:38
  • @Denny what do you mean? Which one would you exclude? I have replaced `annotationProcessor` with `kapt` – kingston Sep 16 '18 at 16:20
  • After adding above, make sure to have internet permission in manifest file, otherwise it won't generate stub classes – Ashok Reddy Narra Mar 21 '19 at 11:32
10

In Kotlin, we have to add kapt compiler plugin to use Dagger 2.

In your app gradle, add this plugin

apply plugin: 'kotlin-kapt'

And add dependencies as below

dependencies
{
    implementation "com.google.dagger:dagger:$latest_version"
    kapt  "com.google.dagger:dagger-compiler:$latest_version"
    implementation "com.google.dagger:dagger-android:$latest_version"
    kapt  "com.google.dagger:dagger-android-processor:$latest_version"
    implementation "com.google.dagger:dagger-android-support:$latest_version"
    kapt  "com.google.dagger:dagger-android-support:2.12"
}

See Kotlin Documentation

Faraz
  • 2,144
  • 1
  • 18
  • 28
3

in my case (currently using kotlin)

i use this build gradle

  implementation 'com.google.dagger:dagger:2.24'
  annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
  annotationProcessor 'com.google.dagger:dagger-android-processor:2.24'
  implementation 'com.google.dagger:dagger-android-support:2.24'

after sync gradle,

  1. I quit Android studio (Command + Q).

  2. Delete folder "build" inside 'app' folder

  3. reopen Android Studio

DaggerAppComponent created.

Gideon Steven
  • 399
  • 4
  • 15
0

The latest version of Dagger2 only support below settings in Gradle: https://github.com/google/dagger#gradle

def daggerVer = 2.24 // or latest version
api "com.google.dagger:dagger:$daggerVer"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer"
api "com.google.dagger:dagger-android:$daggerVer"
api "com.google.dagger:dagger-android-support:$daggerVer" // if you use the support libraries
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVer"
Jagger
  • 2,352
  • 2
  • 13
  • 12