When Android Studio came to replace the old Eclipse IDE, a great sigh was heard amongst Android developers around the globe. True project dependency, where a project can inherit the code and assets of another project, was now easily achievable. Long gone were the days of fighting with ANT to collect assets correctly.
But this raised a new issue. Since each of these subprojects is a separate module, each module comes with its own dependency tree. And those different trees might conflict.
TL;DR
There comes a time where you wonder why a certain library was included in your project, or why there are multiple conflicting versions of the same library.
Gradle comes with a great tool that allows you to investigate the dependency tree of your project and locate what gradle configuration and which module are responsible for a dependency.
The syntax is really simple:
gradle -q dependencyInsight --configuration CONFIGURATION_NAME --dependency DEPENDENCY_NAME
Example 1:
Let's find out where do I use Fresco in one of PeakApps' projects:
gradle -q dependencyInsight --configuration compile --dependency fresco
produces the following result:
It's clear that 3 of my modules (peaksdk, app, ReactAndroid) rely on Fresco, and that there is no version conflict.
Example 2:
After an update to Google Services, Firebase suddenly appeared in one of PeakApps' projects. 2 different versions to be exact. So I wanted to find out the origin for this edition.
gradle -q dependencyInsight --configuration compile --dependency firebase
produced the following result:
This was interesting since it was clear that none of my modules explicitly uses Firebase. So why is it there? I'll answer this in a future post.