【问题标题】:Share a Dagger 2 component between two different flavors在两种不同风格之间共享 Dagger 2 组件
【发布时间】:2015-12-02 15:17:00
【问题描述】:

我有两种口味:专业版和免费版。在其中的每一个中,我都有一个 MainActivity,但我希望 MainComponentMainModule 对两者都相同,所以 MainComponentMainModule 都在 src/java/main 中,但我得到一个错误在我的 MainComponent 中,因为没有导入两种风格的 MainActivity。在这里,让我说清楚:

这是 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,因此当我切换到专业版本时会出错。

【问题讨论】:

    标签: java android dagger-2


    【解决方案1】:

    在使用风味时,您不应该为不同的组件使用不同的包。

    而不是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 只会编译所选风味的实现。

    【讨论】:

    • 但是对于不同的口味我需要不同的 MainActivity
    • 我遇到了冲突。当我切换口味时,MainComponent 的导入必须由我手动调整。显然我做错了什么。
    • 但我的两种口味都有不同的包名称(或应用程序ID),这导致MainAcitivty 具有不同的完全限定名称。如果两种口味的包装名称不同,我将如何处理? src/java/main 是否应该包含 MainAcitivity 如果我想在这两种风格中实现它?根据我的阅读,它不应该。
    • 您可以使用单独的应用程序 ID 并仍然共享活动。您只需要在您的 android 清单中完全限定您的活动的名称。这意味着您可以编写 android:name="com.xxx.myapp.MainActivity" 而不是编写 android:name=".MainActivity"
    • @stack 我明白 cyroxis 现在在说什么了。你需要为两者使用相同的包名,不要在实际的 java 包名中使用 free/pro 。只需使用相同的包但在 src 下的 free/pro 子文件夹中。
    【解决方案2】:

    您可以在运行时使用 BuildConfig.FLAVOR 确定风味,然后您可以有选择地添加广告以及不添加广告。我个人会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2017-05-06
      • 2017-01-21
      • 1970-01-01
      • 2013-09-07
      相关资源
      最近更新 更多