DaggerApplicationComponent not compiled
Solution 1
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
Solution 2
Dagger like compile-time dependency injection tools need once run application. Then it will create automatically if there is no error.
Solution 3
The detailed solution is here:
Inside your app-level build.gradle
inside dependencies
block, add these lines:
//dagger2
api 'com.google.dagger:dagger:2.24'
api 'com.google.dagger:dagger-android:2.24'
api 'com.google.dagger:dagger-android-support:2.24'
annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
kapt 'com.google.dagger:dagger-compiler:2.24'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.24'
kapt 'com.google.dagger:dagger-android-processor:2.24'
compileOnly 'javax.annotation:jsr250-api:1.0'
implementation 'javax.inject:javax.inject:1'
Inside android
block of app-level build.gradle
,
kapt {
generateStubs = true
}
At the top of the app-level build.gradle
, Do this in exactly below order.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
Finally, You need to configure Annotation Process as provided in the screenshot below. You can do this File>Other Settings>Settings for New Projects>
search"Annotation processor"
After this, do from Menu Build > Rebuild
. You are done!
Test:
@Component
public interface ApplicationComponent {
}
Now, you can use DaggerApplicationComponent
that was generated at compile-time for your Applicatio
nComponent interface.
public class MyApplication extends Application {
ApplicationComponent applicationComponent = DaggerApplicationComponent.create();
}
Solution 4
May be it is too late. But implementation
also work on dagger 2.11
implementation 'com.google.dagger:dagger-android:2.11'
implementation 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
I have made a simple hello world project to implement dagger 2.11 using Android Studio 3.0 beta-2. Hope this might help the beginners (like me) to have a good start since google documentation does not provide a clear instructions on it
Solution 5
I started seeing problems when I upgraded to gradle 3.0.0 as well. For me the solution was to change the implementation dagger lines to api:
api 'com.google.dagger:dagger-android:2.11'
KellyTheDev
Updated on June 29, 2022Comments
-
KellyTheDev almost 2 years
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