Android自定义产品口味的工作流程

Saa*_*ooq 1 android android-build android-intent dagger

我有一个带有一堆产品口味的应用程序,它们基本上是单个应用程序的白色标签.然而,偶尔会有一些与主流有所不同,因为客户想要的东西略有不同.到目前为止,我们一直在编辑这些案例的代码,并使用意大利面条代码(许多ifs和elses)来确保其他应用程序不会中断.毋庸置疑,这不是一种可扩展(甚至是理智)的方法.

一种选择是在productFlavor源文件夹中编写活动类,即src/flavor1/java/AnActivity.java,src/flavor2/java/AnActivity.java等等.由于productFlavor代码不能覆盖src/main类,因此即使没有自定义,也需要为每个新的风格复制相同的类.我真的不太喜欢这个选项.它导致许多冗余代码和类名最终不再具有描述性,因为它们都必须具有相同的名称才能覆盖其他代码,即使它们可能正在做一些不同的事情.

另一个选择可能是使用类似的东西Dagger来构建ObjectGraph和注入不同实现的Intents.例如,如果是flavor1,则单击按钮X时,将ActivityA注入意图,如果是flavor2,ActivityB则注入意图.

这似乎是一种更好的方法,但我仍然不确定如何实现在默认情况下覆盖绑定的类ObjectGraph.

关于实施或其他选择的任何想法?我不是必须的Dagger,我只是开始研究依赖注入和测试,所以其他框架也能正常工作.

Jak*_*ton 5

这是我做的......

src/flavor1/java/com/myapp/Modules.java:

public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor1Module(app)
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

src/flavor2/java/com/myapp/Modules.java:

public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

src/main/java/com/myapp/MyAppApplication.java:

ObjectGraph og = ObjectGraph.create(Modules.get(this));
Run Code Online (Sandbox Code Playgroud)

MyAppModule有共同的依赖.Flavor1Module并且Flavor2Module可以贡献其他依赖项或覆盖MyAppModuleif中的依赖项overrides=true.