提供 Dagger flavor-specific 模块

Provide Dagger flavor-specific module

我有一个有 5 种口味的应用程序。我只希望其中之一提供不同的匕首模块实现(相同的接口)。我不想在每种风格中创建这个模块,我只想拥有一个特定于风格的模块和一个用于所有其他风格的默认模块。所以我尝试使用目录 main 来保留默认模块,同时在其中一种风格中实现不同的模块。当然,这不起作用,因为会抛出重新声明错误。

有没有办法实现这样的方法,为所有风格创建一个默认的匕首模块,但只为其中一个创建替代实现?

有 2 个选项可以实现此目的:

  1. 为所有产品风格添加特定于源集的模块(src/flavorA/javasrc/flavorB/java)并且不要在主源集中定义模块(因为那样会抛出错误由于重新申报)

  2. 您可以在 main source set 中添加 dagger 模块,并在 BuildConfig class 中检查 if else 产品风味常量为您的接口提供相关实现。

PS:Gradle 中的产品风味通过合并主要源代码和风味特定源集的源代码来工作,因此需要定义风味特定源集中的任何 class专门针对所有风格的源代码集,从不在 main 中以避免编译错误。

资源也以类似方式合并,但如果主要源集和风格源集之间发生冲突,后者会无任何错误地覆盖