在两种不同风格之间共享一个 Dagger 2 组件
Share a Dagger 2 component between two different flavors
我有两种口味:专业版和免费版。在每一个中,我都有一个 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
,因此在我切换到专业版时出现错误。
使用风味时,您不应该为不同的组件使用不同的包。
而不是com.xxx.myapp.free.MainActivity
将 MainActivity 上移到 com.xxx.myapp.MainActivity
两个版本的 MainActivity 必须具有相同的完全限定名称。
更新
您有两个名为 MainActivity
的 class,但对于 Java,它们具有不同的完全限定名称 com.xxx.myapp.free.MainActivity
和 com.xxx.myapp.pro.MainActivity
(只是猜测)。
您真正需要的是 class com.xxx.myapp.MainActivity
具有特定风味的实现。您可以通过风味特定的文件夹路径为每种风味添加单独的 MainActivity 实现。
app/src/free/java/com/xxx/myapp/MainActivity.java
app/src/pro/java/com/xxx/myapp/MainActivity.java
Gradle 只会编译所选风格的实现。
您可以使用 BuildConfig.FLAVOR 在运行时确定风格,然后您可以有选择地添加广告和不添加广告。我个人会这样做。
我有两种口味:专业版和免费版。在每一个中,我都有一个 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
,因此在我切换到专业版时出现错误。
使用风味时,您不应该为不同的组件使用不同的包。
而不是com.xxx.myapp.free.MainActivity
将 MainActivity 上移到 com.xxx.myapp.MainActivity
两个版本的 MainActivity 必须具有相同的完全限定名称。
更新
您有两个名为 MainActivity
的 class,但对于 Java,它们具有不同的完全限定名称 com.xxx.myapp.free.MainActivity
和 com.xxx.myapp.pro.MainActivity
(只是猜测)。
您真正需要的是 class com.xxx.myapp.MainActivity
具有特定风味的实现。您可以通过风味特定的文件夹路径为每种风味添加单独的 MainActivity 实现。
app/src/free/java/com/xxx/myapp/MainActivity.java
app/src/pro/java/com/xxx/myapp/MainActivity.java
Gradle 只会编译所选风格的实现。
您可以使用 BuildConfig.FLAVOR 在运行时确定风格,然后您可以有选择地添加广告和不添加广告。我个人会这样做。