Gradle依赖配置:implementation vs api vs runtimeonly vs compileonly

41
无法理解在Android Studio 3.0中引入的最新gradle依赖配置,例如implementation、api、compileonly和runtimeonly。
1个回答

70
请参考链接:Android Studio 3.0新的Gradle配置,该链接提到以下内容:
- implementation:当模块配置实现依赖项时,它告诉Gradle模块不想在编译时将该依赖项泄露给其他模块。也就是说,该依赖项仅在运行时对其他模块可用。相比于api或compile,使用此依赖项配置可以显著提高构建时间,因为它减少了构建系统需要重新编译的项目数。例如,如果实现依赖项更改其API,Gradle只重新编译直接依赖于该依赖项的那个依赖项和模块。大多数应用和测试模块都应该使用此配置。 - api:当模块包含api依赖项时,它告诉Gradle模块想要传递导出该依赖项至其他模块,以便它们在运行时和编译时都可用。这个配置的行为与compile(现已弃用)完全一样,通常只应在库模块中使用它。这是因为,如果一个api依赖项更改了它的外部API,Gradle将重新编译所有能够访问该依赖项的模块。因此,有大量的api依赖项会显著增加构建时间。除非您想将依赖项的API公开给单独的测试模块,否则应用模块应该使用实现依赖项。 - compileOnly:Gradle仅将依赖项添加到编译类路径(不添加到构建输出)。当您创建一个Android库模块并且需要在编译时使用依赖项但在运行时可选时,这很有用。也就是说,如果您使用此配置,则库模块必须包含一个运行时条件来检查依赖项是否可用,然后优雅地更改其行为,以便即使没有提供它,它仍然可以正常工作。这有助于通过不添加非关键的瞬态依赖项来减小最终APK的大小。此配置的行为与provided(现已弃用)完全一样。
  • runtimeonly:Gradle 仅将该依赖项添加到构建输出中,以供运行时使用。也就是说,它不会添加到编译类路径中。该配置与 apk 相同(现已过时)。

  • 1
    不清楚implementationruntimeOnly之间的区别。请参阅 https://dev59.com/bVUK5IYBdhLWcg3w4jQv - Marco Sulla

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接