在更新到 Android Studio 3.0 并创建一个新项目后,我注意到build.gradle有一种新的方法可以添加新的依赖项,而不是compilethereimplementation和testCompilethere testImplementation。
build.gradle
compile
implementation
testCompile
testImplementation
例子:
implementation 'com.android.support:appcompat-v7:25.0.0' testImplementation 'junit:junit:4.12'
代替
compile 'com.android.support:appcompat-v7:25.0.0' testCompile 'junit:junit:4.12'
它们之间有什么区别,我应该使用什么?
tl;博士
只需更换:
api
debugCompile
debugImplementation
androidTestCompile
androidTestImplementation
compileOnly
provided
这是谷歌在 IO17 上宣布的Android Gradle 插件3.0带来的重大变化之一
该compile配置现已弃用,应替换为implementationorapi
从Gradle 文档中:
dependencies { api 'commons-httpclient:commons-httpclient:3.1' implementation 'org.apache.commons:commons-lang3:3.5' } 出现在api配置中的依赖将传递给库的消费者,因此将出现在消费者的编译类路径中。 implementation另一方面,在配置中找到的依赖项不会暴露给消费者,因此不会泄漏到消费者的编译类路径中。这有几个好处: 依赖项不再泄漏到消费者的编译类路径中,因此您永远不会意外依赖传递依赖项 由于类路径大小减小,编译速度更快 实现依赖项发生变化时减少重新编译:消费者不需要重新编译 更清洁的发布:当与新的 maven-publish 插件一起使用时,Java 库会生成 POM 文件,这些文件可以准确区分针对库编译所需的内容和在运行时使用库所需的内容(换句话说,不要混合编译库本身所需的内容和针对库编译所需的内容)。 compile 配置仍然存在,但不应使用,因为它不会提供api和implementation配置提供的保证。
dependencies { api 'commons-httpclient:commons-httpclient:3.1' implementation 'org.apache.commons:commons-lang3:3.5' }
出现在api配置中的依赖将传递给库的消费者,因此将出现在消费者的编译类路径中。
implementation另一方面,在配置中找到的依赖项不会暴露给消费者,因此不会泄漏到消费者的编译类路径中。这有几个好处:
compile 配置仍然存在,但不应使用,因为它不会提供api和implementation配置提供的保证。
注意: 如果您只在应用程序模块中使用库 - 常见情况 - 您不会注意到任何差异。 如果您有一个复杂的项目,其中的模块相互依赖,或者您正在创建一个库,您只会看到差异。