在两种不同风格之间共享Dagger 2组件

时间:2015-12-02 15:17:01

标签: java android dagger-2

我有两种口味:亲和自由。在每个中,我都有一个MainActivity,但我希望MainComponentMainModule对于两者都相同,因此MainComponentMainModule都在src / java中/ main,但由于没有导入两种风格的MainActivity,我的MainComponent出现错误。在这里,让我说清楚:

这是src / java / main中MainComponent的样子:

import com.xxx.myapp.di.modules.MainModule;
import com.xxx.myapp.free.MainActivity;
import com.xxx.myapp.presenters.MainPresenterImpl;

import javax.inject.Singleton;

import dagger.Component;


@Singleton
@Component(modules = {MainModule.class})
public interface MainComponent {
    void inject(MainActivity mainActivity);
    void inject(MainPresenterImpl mainPresenter);
}

在上面显示的代码中,它只从免费的味道中导入MainActivity,因此当我切换到专业风味时会出错。

2 个答案:

答案 0 :(得分:4)

使用flavor时,不应该为不同的组件使用不同的包。

而不是com.xxx.myapp.free.MainActivity 将MainActivity向上移动到com.xxx.myapp.MainActivity两个版本的MainActivity必须具有相同的完全限定名称。

<强>更新

您有两个名为MainActivity的类,但对于Java,它们具有不同的完全限定名称com.xxx.myapp.free.MainActivitycom.xxx.myapp.pro.MainActivity(只是猜测)。

您真正需要的是一个具有特定于风格的实现的类com.xxx.myapp.MainActivity。你可以通过特定于风味的文件夹路径为每种风味添加一个单独的MainActivity实现。

app/src/free/java/com/xxx/myapp/MainActivity.java app/src/pro/java/com/xxx/myapp/MainActivity.java

Gradle只会编译所选flavor的实现。

答案 1 :(得分:0)

您可以使用BuildConfig.FLAVOR在运行时确定风味,然后您可以选择性地添加广告,而不是。我会亲自这样做。