首页 > 解决方案 > 为什么编译和运行时依赖很重要?

问题描述

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

作为安卓开发者,

  1. 我为什么要关心这个?
  2. 在 gradle 中,我为什么要使用compileOnlyvs implementation/api

标签: androidandroid-gradle-plugin

解决方案


我为什么要关心这个?

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

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

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

Gradle 仅将依赖项添加到编译类路径(它不会添加到构建输出中)。当您创建 Android 库模块并且在编译期间需要依赖项时,这很有用,但在运行时存在是可选的。也就是说,如果你使用这个配置,那么你的库模块必须包含一个运行时条件来检查依赖是否可用,然后优雅地改变它的行为,这样如果它没有提供它仍然可以运行。这有助于通过不添加不重要的临时依赖项来减少最终 APK 的大小。此配置的行为就像提供的一样(现在已弃用)。

资源

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

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


推荐阅读