Search code examples
androidandroid-gradle-plugindagger-2android-studio-3.0dagger

DaggerApplicationComponent not compiled


I'm using the latest beta of android studio 3 (currently beta 4), and I can't seem to get it to generate the dagger classes needed.

From my side I created an empty project. Then I renamed the activity to match the dagger notes, YourActivity. See "Injecting Activity objects" in https://google.github.io/dagger/android.html, which shows this:

@Subcomponent(modules = ...)
public interface YourActivitySubcomponent extends AndroidInjector<YourActivity> {
  @Subcomponent.Builder
  public abstract class Builder extends AndroidInjector.Builder<YourActivity> {}
}

@Module(subcomponents = YourActivitySubcomponent.class)
abstract class YourActivityModule {
  @Binds
  @IntoMap
  @ActivityKey(YourActivity.class)
  abstract AndroidInjector.Factory<? extends Activity>
  bindYourActivityInjectorFactory(YourActivitySubcomponent.Builder builder);
}

@Component(modules = {..., YourActivityModule.class})
interface YourApplicationComponent {}

@ActivityScope
@ContributesAndroidInjector(modules = { /* modules to install into the subcomponent */ })
abstract YourActivity contributeYourActivityInjector();

public class YourApplication extends Application implements HasActivityInjector {
  @Inject DispatchingAndroidInjector<Activity> dispatchingActivityInjector;

  @Override
  public void onCreate() {
    super.onCreate();
    DaggerYourApplicationComponent.create()
        .inject(this);
  }

  @Override
  public AndroidInjector<Activity> activityInjector() {
    return dispatchingActivityInjector;
  }
}

//the renamed activity
public class YourActivity extends Activity {

  public void onCreate(Bundle savedInstanceState) {
    //added this line
    AndroidInjection.inject(this);

    super.onCreate(savedInstanceState);
  }
}

I've also added the following from that page for the gradle build app file:

dependencies {
  compile 'com.google.dagger:dagger-android:2.11'
  compile 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries
  annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
}

because I was still not seeing anything I tried updating compile to implementation with still no luck, and if you're curious, that looks like:

dependencies {
  implementation 'com.google.dagger:dagger-android:2.11'
  implementation 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries
  annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
}

Also, I've found the default setting where I can turn on the default Build -> Compiler -> Annotation Processors to Enable it. I did this before creating the new project.

After all of this, nothing seems to work. Is this broken in android studio 3.x? If not how did you get it work?

Thanks, Kelly


Solution

  • Ahhh ha! I discovered the issue. It appears I needed another annotationProcessor line for the gradle app file

    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

    While their example doesn't quite work right, at least I am now seeing the DaggerYourApplicationComponent

    the full gradle portion:

    dependencies {
      compile 'com.google.dagger:dagger-android:2.11'
      compile 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries
      annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
      annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
    }
    

    Note: I haven't tried replacing compile with implementation, but I'm just glad this worked.

    Hopefully, this helps others too