Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: cannot find symbol variable DaggerAppComponent

While trying to integrate latest Dagger 2 version, I am facing problem of Dagger auto generation. Dagger is not auto generating DaggerAppComponent in spite of several Rebuilds and Make Module App process.

Application class:

public class BaseApplication extends Application
{
    private AppComponent appComponent;

    @Override
    public void onCreate()
    {
        super.onCreate();
        initAppComponent();
    }

    private void initAppComponent()
    {
        DaggerAppComponent.builder()
                .appModule(new AppModule(this))
                .build();
    }

    public AppComponent getAppComponent()
    {
        return appComponent;
    }
}

AppComponent

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
    void inject(BaseApplication application);
}

AppModule:

@Module
public class AppModule
{
    private BaseApplication application;

    public AppModule(BaseApplication app)
    {
        application = app;
    }

    @Provides
    @Singleton
    Context provideContext()
    {
        return application;
    }

    @Provides
    Application provideApplication()
    {
        return application;
    }
}

Dependency used:

compile 'com.google.dagger:dagger-android:2.11'
compile 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'

Any help in this regard will be highly appreciated.

like image 233
Ashwini Kumar Avatar asked Jul 22 '17 05:07

Ashwini Kumar


5 Answers

Seems like I was using the wrong dependencies:

compile 'com.google.dagger:dagger-android:2.x'
compile 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'

The above dependencies should be used if you are using classes in dagger.android.

The correct dependencies are:

compile 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
like image 133
Ashwini Kumar Avatar answered Nov 13 '22 23:11

Ashwini Kumar


You need these two lines

implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'

Use kapt instead of annotationProcessor when using kotlin. Generated class like Dagger+AppComponentClass, eg:DaggerAppComponent

like image 40
Ashik Azeez Avatar answered Nov 13 '22 23:11

Ashik Azeez


Adding the below dependency fixed the issue for me for Java project

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

and for Kotlin project (after adding kotlin-kapt):

kapt "com.google.dagger:dagger-compiler:2.27"
like image 5
Gauri Gadkari Avatar answered Nov 14 '22 01:11

Gauri Gadkari


I had the same problem...What solved my problem was actually adding The view model to the ViewmodelModulle then add the annotation @Inject to the constructor of my view model. It could be a different issue for you but in my situation, this really helped. My code compiled without any problem

@Inject <----- This was Missing in the constructor.

public MessageViewModel(Application application) {
    super(application);
    mApp = application;
like image 2
NelsonRoberts Avatar answered Nov 13 '22 23:11

NelsonRoberts


Try, go to File and

Invalidate and Restart

like image 1
Sebastian Duran Avatar answered Nov 13 '22 23:11

Sebastian Duran