Java 仅在其中一种产品口味中注入Dagger 2的依赖性

Java 仅在其中一种产品口味中注入Dagger 2的依赖性,java,android,dagger-2,Java,Android,Dagger 2,我的应用程序包含两种产品风格:免费和专业。我有一个ApplicationModule为广告提供对象,但是这个对象只在免费版本中需要,因为pro版本没有com.google.android.gms:play services ads:8.3.0依赖项。我如何构造我的项目,以便只有当免费产品风格在使用时,ApplicationModule才提供ads对象?由于您有两种产品风格,我假设免费版本类位于“主”资源集之外的正确版本结构中。我假设你们有另一个付费版本的资源集 因此,在主源集中初始化dagger

我的应用程序包含两种产品风格:免费和专业。我有一个
ApplicationModule
为广告提供对象,但是这个对象只在免费版本中需要,因为pro版本没有
com.google.android.gms:play services ads:8.3.0
依赖项。我如何构造我的项目,以便只有当免费产品风格在使用时,
ApplicationModule
才提供ads对象?

由于您有两种产品风格,我假设免费版本类位于“主”资源集之外的正确版本结构中。我假设你们有另一个付费版本的资源集


因此,在主源集中初始化dagger组件,但让ApplicationModule驻留在每个源集中。模块是提供者,因此,如果您想更改依赖关系,您可以通过定义不同的提供者来更改依赖关系,即使两个源集(付费、非付费)中的每个都有相同的ApplicationModule

所以在src里面,我必须有3个文件夹:free、pro和main。我说对了吗?我的pro版本使用不同的包名,因此我是否也在src/pro/中创建单独的包文件夹?另外,我将这些依赖项注入的
AppNameApplication
类如何。我是否为每种口味创建了不同的
AppNameApplication
类?我的坏,不是
AppNameApplication
。我的意思是
MainActivity
。对于付费和未付费,我将保持相同的软件包名称和结构。这样,主资源可以引用它们。如果希望应用程序具有不同的应用程序ID,则需要查看Gradle的清单占位符。至于主源集中的mainActivity存储