我有一个包含 5 种口味的应用程序。我只希望其中一个提供不同的 dagger 模块实现(相同的接口)。我不想在每种风格中创建这个模块,我只想有一个特定于风格的模块和一个用于所有其他风格的默认模块。所以我尝试使用目录 main
来保留默认模块,同时在其中一种风格中实现不同的模块。当然,这不起作用,因为抛出了重新声明错误。
有没有办法实现这样的方法,为所有风格创建一个默认的匕首模块,但只为其中一种创建替代实现?
答案 0 :(得分:1)
有两种方法可以实现这一点:
为所有产品风格添加源集特定模块(src/flavorA/java
、src/flavorB/java
),并且不要在主源集中定义模块(因为这会因重新声明而引发错误)
您可以在 main source set
中添加 dagger 模块,并对 if else
类中的产品风味常量进行 BuildConfig
检查,以便为您的界面提供相关实现.
PS:Gradle 中的产品风味通过合并主要源代码和风味特定源集的源代码来工作,因此风味特定源集中的任何类都需要专门为所有风味源集定义,并且永远不要在 main 中定义以避免编译错误。
资源也以类似的方式合并,但如果主源和风味源之间发生冲突,则后者会覆盖而没有任何错误