Dagger2 is great when you have it setup, generating the dependency graph during compilation makes it lightning fast during execution. I also like the error messages, as long as you can read Java stack traces all the info for solving errors are in there - I've never seen an unsolvable situation this far.<p>Kapt does bump the <i>clean</i> build time to about 2min, incremental builds take between 10-60s - although actually launching the app on an emulator/device adds another 20s.<p>The cons of Dagger2 that I've experienced since it's launch are; The documentation and support is useless. You're on your own of you don't use a 3rd party sample project as a template. No one understands scopes and subscopes, subcomponents etc. The new Android dagger api is arcane and weird, no one wants to use it.<p>The Dagger2 team should (if they aren't already) create a Kotlin extension for it, I believe there are some syntactic optimizations to be offered.
Unfortunately, using Dagger for DI with Kotlin requires using the Kotlin annotation processor, kapt, which is still incredibly slow, and works non-incrementally.<p>If you value your build times or your sanity in the slightest, I'd recommend either severely limiting use of Dagger, e.g. by only using it in certain, small Gradle modules, or using a different DI solution.
I tried to learn Dagger for a recent project in a similar setting (Dagger+Android+Kotlin). Spent some 8 hours, couldn't make it work and gave up. I suppose, as with most systems, one needs to build up a list of recipes for solving common problems. But with Dagger I found that notoriously hard for some reason. Perhaps because it tends to fail silently at runtime or with non-descriptive errors.
No need to use kapt to kill compilation times. Data Binding is good enough. We started using it a year ago and since then instant run does not work and the debugger takes three minutes to start. Sometimes it mixes generated classes and we have to do a full clean / rebuild.<p>Since then we have introduced Kotlin and Dagger and we are super happy with it.<p>As with Dagger, the learning curve is pretty steep. Having it working with modules + activities + fragments + architecture components has been a real challenge but we love it.<p>For those who are struggling with Dagger: version 2.10 introduced major changes for Android, for good reasons, but it made much harder to use and understand. Many tutorials focus on Dagger < 2.10. You probably should ignore those.<p>And for those who are going crazy with compilation times, Jrebel for Android is a huge time saver. It has an incremental compiler which works with annotation processors. They will stop supporting it in one year, but even then I think it is worth using it. Who knows: if enough people buy licenses maybe they reconsider killing it.