为什么编译和运行时依赖关系很重要



我知道这里讨论的两者之间的区别。

作为安卓系统的开发者,

  1. 为什么我应该关心这个
  2. 在gradle中,为什么我应该使用compileOnly而不是implementation/api

为什么我应该关心这个?

让你的应用程序构建,但不要附带不必要的东西。

在gradle中,为什么我应该使用compileOnly与implementation/api?

compileOnly的文档以一个用例为例:

Gradle只将依赖项添加到编译类路径中(它不会添加到构建输出中(。当您创建Android库模块并且在编译过程中需要依赖项时,这很有用,但在运行时存在是可选的。也就是说,如果使用此配置,则库模块必须包含一个运行时条件,以检查依赖项是否可用,然后适当地更改其行为,以便在未提供依赖项的情况下仍然可以运行。这有助于减少最终APK的大小,因为不添加非关键的瞬态依赖关系。此配置的行为与所提供的一样(现在已弃用(。

例如,考虑一个推送消息库,它同时支持Firebase FCM和Amazon ADM,但不需要两者。如果将两者都作为可传递的依赖项提供,这将不必要地膨胀应用程序。使用compileOnly仍然可以构建库。使用库的开发人员可以选择实际使用哪些依赖项。

另一个例子可以是不需要随应用程序一起提供的编译时注释。

最新更新