希望有人可以解释为什么当将特定模块声明为runtimeOnly而不是将其声明为implementation时,每个模块的数据绑定(bind)似乎不起作用(返回null)。

,例如

假设我有一些要包括或排除的功能模块(类似于动态功能模块),但由于其他原因(我不打算讨论)而现在不使用该功能模块,这更多是一个实验。因此,我们的想法是将多个组件从主应用程序中分离出来,这些组件仅在运行时才可用,换句话说,应用程序与任何附加功能之间几乎没有耦合,并且在我将数据绑定(bind)添加到混合中之前,这种方法可以正常工作,使用*Binding cannot be null崩溃。

android - 问题:数据绑定(bind)不适用于运行时仅gradle依赖项-LMLPHP

我使此设置起作用的唯一方法是从runtimeOnly切换回implementation,到目前为止,据我所知runtimeOnlyimpelentation之间的区别在gradle website上:

android - 问题:数据绑定(bind)不适用于运行时仅gradle依赖项-LMLPHP

所以我的问题是为什么会发生这种情况,在模块中启用数据绑定(bind)是否需要使用implementation配置模块?也许我做错了所有事情,并且误解了runtimeOnly的目的。

最佳答案

  • 实现:大多数情况下我们使用实现配置。它向用户隐藏了模块的内部依赖性,以避免意外使用任何传递性依赖性,从而加快了编译速度,并减少了重新编译的时间。
  • runtime仅:想要在运行时(在最终版本中)更改或交换库行为时使用

  • 对于runtimeOnly,您需要两个依赖关系,一个依赖关系将帮助您在编译时访问代码,另一个依赖关系将在运行时替换/使用。
    运行时示例:
    SLF4J是runtimeOnly的最佳示例之一,在这里我们将使用slf4j-api作为实现配置和slf4j-api的实现(例如slf4j-log4j12或logback-classic等)作为runtimeOnly配置。
    我创建了一个 post ,并使用对每个人都有深入的了解Working Example: source code
    https://medium.com/@gauraw.negi/how-gradle-dependency-configurations-work-underhood-e934906752e5

    10-04 17:36