Gradle依赖配置:实现vs api vs runonly vs compileonly

时间:2017-11-18 10:40:49

标签: android gradle android-studio-3.0

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

1 个答案:

答案 0 :(得分:7)

请参阅Android开发者官方网站上提供的链接:Android Studio 3.0 New Gradle Configuration

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

  
      
  • 实施:当您的模块配置实施依赖项时,它让Gradle知道模块不想要   在编译时将依赖项泄漏给其他模块。那就是   依赖性仅在运行时可用于其他模块。用这个   可以导致依赖配置而不是api或编译   显着的构建时间改进,因为它减少了数量   构建系统需要重新编译的项目。例如,如果是   实现依赖项更改其API,Gradle只重新编译它   依赖关系和直接依赖它的模块。大多数应用和   测试模块应使用此配置。
  •   
  • api:当模块包含api依赖项时,它让Gradle知道模块想要传递导出   依赖于其他模块,以便它们可以在两个模块上使用   运行时和编译时。此配置的行为与编译类似   (现已弃用),您通常只应在此处使用此功能   图书馆模块。这是因为,如果api依赖性改变了它   外部API,Gradle重新编译所有有权访问它的模块   编译时的依赖。所以,拥有大量的api   依赖关系可以显着增加构建时间。除非你想要   将依赖关系的API公开给单独的测试模块app模块   应改为使用实现依赖。
  •   
  • compileOnly: Gradle仅将依赖项添加到编译类路径中(它不会添加到构建输出中)。这很有用   当您创建Android库模块并且需要时   编译期间的依赖关系,但它可以选择出现在   运行。也就是说,如果您使用此配置,那么您的库   模块必须包含一个运行时条件来检查是否   依赖是可用的,然后优雅地改变它的行为   如果没有提供,它仍然可以运作。这有助于减小尺寸   通过不添加不是瞬态依赖的最终APK   危急。此配置的行为与提供的一样(现在就是这样)   建议使用)。
  •   
  • runtimeonly: Gradle仅将依赖项添加到构建输出,以便在运行时使用。也就是说,它没有添加到编译中   类路径。此配置的行为就像apk(现在是这样)   建议使用)。
  •