我有两种口味:亲和自由。在每个中,我都有一个MainActivity,但我希望MainComponent
和MainModule
对于两者都相同,因此MainComponent
和MainModule
都在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
,因此当我切换到专业风味时会出错。
答案 0 :(得分:4)
使用flavor时,不应该为不同的组件使用不同的包。
而不是com.xxx.myapp.free.MainActivity
将MainActivity向上移动到com.xxx.myapp.MainActivity
两个版本的MainActivity必须具有相同的完全限定名称。
<强>更新强>
您有两个名为MainActivity
的类,但对于Java,它们具有不同的完全限定名称com.xxx.myapp.free.MainActivity
和com.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在运行时确定风味,然后您可以选择性地添加广告,而不是。我会亲自这样做。