29
votes

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"
4
In the manifest, did you register the application class? - OneCricketeer
Yes and the app is working fine with version 2.10 - kingston
Instead try DaggerAppComponent.builder().create(this).inject(this). - azizbekian
@azizbekian DaggerAppComponent does not exist at all - kingston
@kingston This tends to indicate that Dagger failed to generate the file, and has printed the reason for the failure into your compiler output. Can you find that and paste that in here? - Jeff Bowman

4 Answers

59
votes

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.

10
votes

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

3
votes

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.

0
votes

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"