Gradle依赖关系配置:实现vs api vs runtimeonly vs compileonly

问题描述:

无法理解在Android Studio 3.0中引入的最新的gradle依赖性配置,即实现,api,编译型和仅运行时。Gradle依赖关系配置:实现vs api vs runtimeonly vs compileonly

请参考链接:Android Studio 3.0 New Gradle Configuration可在Android开发者官方网站。

基于上面的链接提到的描述:

  • 实施:当你的模块配置的实现依赖,它让摇篮知道该模块不希望 泄漏依赖于其他模块在编译时。也就是说, 依赖关系仅在运行时才可用于其他模块。使用这种 依赖的配置,而不是API或编译可能导致 显著编译时间的改进,因为它减少的编译系统需要重新编译 项目的数量。例如,如果 实现依赖项更改其API,则Gradle将仅重新编译该依赖项以及直接依赖它的模块。大多数应用程序和 测试模块都应使用此配置。
  • API:当一个模块包括API的依赖,它让摇篮知道模块要传递地出口是 依赖于其他模块,以便它提供给他们在两个 运行时和编译时间。此配置的行为与编译 (现在不推荐使用)类似,您通常应该只在 库模块中使用此配置。这是因为,如果api依赖项更改其外部API,则Gradle会在编译时重新编译所有可访问该 依赖项的模块。因此,拥有大量api 依赖关系可以显着增加构建时间。除非您想要 将依赖项的API公开给单独的测试模块,否则应用程序模块 应改为使用实现依赖项。
  • compileOnly:摇篮增加依赖于编译类路径中唯一(它不添加到生成输出)。这是非常有用 当你创建一个Android库模块,你在编译过程中所需要的 依赖,但它是可选的有出席 运行。也就是说,如果你使用这种配置,那么你的库 模块必须包括一个运行状况检查 依赖是否可用,然后优雅地改变其行为,如果它没有提供它 仍然可以正常工作。这有助于减少最终APK的大小,因为不会添加非关键的 临时依赖关系。此配置的行为与提供的相同(现在不推荐使用 )。
  • runtimeonly:摇篮增加的依赖性在运行时仅生成输出,以供使用。也就是说,它不会被添加到编译 classpath中。此配置的行为与apk相同(现在不推荐使用 )。