As seen in Android Studio 3.0 (canary 3.0), we now add depedencies by declaring implementation instead of compile configuration.
Thanks to the really useful link from @petter, I would like to add a summary as following.
It means that Android Gradle build starts to use the java-library plugin instead of its previous java plugin. This plugin introduces the exposed API concept with two configuration to declare dependencies.
should be used to declare dependencies which are exported by the library API
For example, in a case that you are building a Java (or Android) library which is used by other apps. If you use any third-party library and you want to expose its API to your library's consumer also, you should declare like this.
api 'commons-httpclient:commons-httpclient:3.1'
should be used to declare dependencies which are internal to the component.
When developing Android app, our app module is the end point which does not need to expose any part externally. implementation should be used.
implementation 'org.apache.commons:commons-lang3:3.5'
The previous compile configuration works the same as api. The implementation, however, brings the following benefits.
It seems like compile has been deprecated and api or implementation should be used instead. According to The Java Library Plugin - Gradle User Guide Version 3.5:
The
compileconfiguration still exists but should not be used as it will not offer the guarantees that theapiandimplementationconfigurations provide.