安卓自定义产品风格的工作流程



我有一个应用程序,其中包含一堆产品口味,这些口味基本上是单个应用程序的白标。但是,偶尔会在某些风格上与主流存在一些差异,因为客户想要一些稍微不同的东西。到目前为止,我们一直在编辑这些情况的代码,并使用意大利面条代码(很多ifs和其他)来确保其他应用程序不会损坏。不用说,这不是一种非常可扩展(甚至理智)的方法。

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

另一种选择可能是使用 Dagger 之类的东西来构建ObjectGraph并为不同的实现注入 Intent。例如,如果它是flavor1,则单击按钮 X 时,将注入ActivityA的意图,如果它是flavor2的,则会注入ActivityB的意图。

这似乎是一种更好的方法,但我仍然不确定如何实现将覆盖默认ObjectGraph中的绑定的类。

关于实施或其他选项的任何想法?我不拘泥于Dagger,我刚刚开始研究依赖注入和测试,以便其他框架也能正常工作。

这是我做的...

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)
    };
  }
}

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)
    };
  }
}

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

ObjectGraph og = ObjectGraph.create(Modules.get(this));

MyAppModule具有共同的依赖关系。 Flavor1ModuleFlavor2Module 可以提供额外的依赖项或覆盖来自 MyAppModule 的依赖项(如果overrides=true)。

最新更新