渐变依赖配置:实现vs api vs runtimeonly vs compileonly



无法理解Android Studio 3.0中引入的最新gradle依赖项配置,即实现、api、compileonly和runtimeonly。

请参阅安卓开发者官方网站上的链接:安卓Studio 3.0 New Gradle Configuration。

基于以上链接中提到的描述:

  • 实现:当您的模块配置实现依赖项时,它会让Gradle知道模块不想在编译时将依赖项泄漏到其他模块。也就是说依赖项仅在运行时可用于其他模块。使用此依赖配置而不是api或compile可能导致显著的构建时间改进,因为它减少了生成系统需要重新编译的项目。例如,如果实现依赖性改变了它的API,Gradle只重新编译依赖关系和直接依赖它的模块。大多数应用程序和测试模块应该使用这种配置
  • api:当一个模块包含一个api依赖项时,它会让Gradle知道该模块想要转换导出对其他模块的依赖性,以便在这两个模块上都可以使用运行时和编译时。此配置的行为与编译类似(现在已弃用),并且通常只应在库模块。这是因为,如果api依赖项更改了外部API,Gradle重新编译所有可以访问的模块编译时的依赖关系。因此,拥有大量的api依赖关系会显著增加构建时间。除非你愿意将依赖项的API公开给单独的测试模块、应用程序模块应该使用实现依赖关系
  • compileOnly:Gradle仅将依赖项添加到编译类路径中(它不会添加到构建输出中)。这很有用当您创建Android库模块时,您需要编译期间的依赖项,但在运行时。也就是说,如果您使用此配置,那么您的库模块必须包含运行时条件,以检查依赖项可用,然后适当地更改其行为如果没有提供,仍然可以运行。这有助于减小通过不添加不批评的此配置的行为与提供的(现在已弃用)
  • runtimeonly:Gradle仅将依赖项添加到构建输出中,以便在运行时使用。也就是说,它不会添加到编译中类路径。此配置的行为与apk(现在已弃用)

最新更新