16

正如在 Android Studio 3.0 (canary 3.0) 中看到的,我们现在depedencies通过声明implementation而不是compile配置来添加。

// Before
compile 'com.android.support:appcompat-v7:25.3.1'

// Currently
implementation 'com.android.support:appcompat-v7:25.3.1'

我们仍然可以使用compile,但我想了解:

  • implementationcompile配置有什么区别?
  • 为什么 Android Gradle 构建更改implementation为默认使用?
4

2 回答 2

30

感谢@petter 提供的非常有用的链接,我想添加如下摘要。

这意味着Android Gradle build开始使用java-library插件而不是以前的java插件。这个插件引入了exposed API两个概念configuration来声明依赖关系。

  1. api

应该用于声明由库 API 导出的依赖项

例如,如果您正在构建一个供其他应用程序使用的 Java(或 Android)库。如果您使用任何第三方库,并且还想将其 API 公开给您的库的使用者,您应该像这样声明。

api 'commons-httpclient:commons-httpclient:3.1'
  1. 执行

应该用于声明组件内部的依赖项。

在开发 Android 应用时,我们的app模块是终点,不需要对外暴露任何部分。implementation应该使用。

implementation 'org.apache.commons:commons-lang3:3.5'

之前的compile配置与api. implementation但是,它带来了以下好处。

  • 依赖项不再泄漏到消费者的编译类路径中,因此您永远不会意外依赖传递依赖项
  • 由于类路径大小减小,编译速度更快
  • 实现依赖项发生变化时减少重新编译:消费者不需要重新编译
  • 更清洁的发布:当与新的 maven-publish 插件一起使用时,Java 库会生成 POM 文件,这些文件可以
    准确区分针对
    库编译所需的内容和在运行时使用库所需的内容(换句话说,不要混合编译库本身
    所需的内容和针对库编译所需的内容)。
于 2017-06-07T09:47:09.307 回答
14

似乎compile已被弃用,api或者implementation应该被使用。根据Java 库插件 - Gradle 用户指南 3.5 版

compile配置仍然存在,但不应使用,因为它不会提供apiimplementation配置提供的保证。

于 2017-06-07T08:31:28.940 回答