Android 如何更改匕首模块';gradle香精的s注射剂?

Android 如何更改匕首模块';gradle香精的s注射剂?,android,gradle,dagger,Android,Gradle,Dagger,我有一个Android/gradle项目,有两种风格,使用Dagger。这些风味有几个共同的活动,但每种风味都有一些独特的活动。因此,对于一种口味: @Module(injects = { CommonActivity1.class, CommonActivity2.class, Flavor1Activity.class, }) public class MyModule { ... } 另一方面: @Module(injects = {

我有一个Android/gradle项目,有两种风格,使用Dagger。这些风味有几个共同的活动,但每种风味都有一些独特的活动。因此,对于一种口味:

@Module(injects = {
        CommonActivity1.class,
        CommonActivity2.class,
        Flavor1Activity.class,
})
public class MyModule { ... }
另一方面:

@Module(injects = {
        CommonActivity1.class,
        CommonActivity2.class,
        Flavor2Activity.class,
})
public class MyModule { ... }
除了注入的类之外,模块是相同的。我目前只是在两个MyModule.java文件之间复制代码,这两个文件放在相应的perflavor目录中

我想找到一个解决方案,避免在两个相同的模块之间复制/粘贴代码,理想情况下避免需要两次指定公共活动


我不在乎解决方案是用Java还是Gradle。如果有办法在Gradle中生成注释,那就好了。如果有办法在Java中重构注入列表,那也没关系。我也愿意重新组织我的Dagger方法,以完全避免这个问题。

我认为你的解决方案是addsTo

如果模块的内容相同,则在默认源目录中包含基本模块实现。然后在每一个风味实现中创建特定于风味的模块

在模块注释中使用
addsTo=BaseModule.class

使用这种方法,您只需要在模块中定义注释,就可以重用基本实现

你最终会得到这样的结果

@Module (
        library = true
        , complete = false
)
public class BaseModule {}


@Module (
        library = true
        , complete = false
        , addsTo = BaseModule.class
        , injects = { ... }
)
public class FlavourOneModule {}

@Module (
        library = true
        , complete = false
        , addsTo = BaseModule.class
        , injects = { ... }
)
public class FlavourTwoModule {}

这正是我要找的。我所做的唯一修改是从perflavor模块中删除库和完整标志。谢谢