Inside a dependency block, we can declare a library dependency using one of several dependency configurations. The following table shows the differences between them.
configuration | behavior | advantage |
---|---|---|
implementation | exist in compile time classpath and build output but only visible to other modules at runtime | significantly reduce build time |
api | just like implementation, but transtively export to other modules | if using too much, it will sigificantly increase build time |
compileOnly | only exists in compile time | reduce the final apk size by not adding transient dependencies that aren’t critical |
runtimeOnly | only exists in runtime, in build output | |
annotationProcessor | if the dependency is an annotation processor |