Dagger2- 切换不同的flavors依赖:Android Studio

3

我正在使用Dagger 2,并希望在Android Studio中为不同的构建风格注入不同的依赖项。

public class DemoApplication extends Application{

AppComponent component;

    @Override
    public void onCreate() {
        super.onCreate();

 component = DaggerAppComponent.builder().module(new Module()).build();
    }
}


@Module
public class Module {

    @Provides
    @Singleton
    public ClassA provideClassA(){
        return new ClassA();
    }
}



@Component (modules = {Module.class})
public interface AppComponent {

    ClassA getClassA();

}

现在假设我想要在prod版本中返回ClassA的对象,但在debug版本中返回从ClassA继承的ClassB的对象。
1个回答

2

使用特定于flavor的源集

例如,我们考虑 mockproduction flavors。创建 mockproduction 目录,并将它们与 main 放在一起,分别在 mockproduction 目录中放置名为 Module 的单独类(包名也必须相同)。这样,当您切换构建变体时,编译器将引用位于 mockproduction flavor 中的 Module 类,从而使您能够根据不同的 flavor 注入不同的实现。

可以查看此处关于源集的参考文档:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Sourcesets-and-Dependencies

此答案也可能对您有所帮助: How the flavor-specific variants are working?


2
Dagger似乎无法编译此方法。 - Sunny
1
@Sunny,这与Dagger本身没有任何关系,只涉及到gradle在源集解析中的作用。请确保:1.清理项目(以删除所有先前生成的dagger类);2.如果您在“mock”和“production”中有“Module”类,则不能在“main”中使用相同名称的类,否则将会出现名称冲突。 - maciekjanusz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接