Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android定制产品口味工作流_Android_Android Intent_Android Build_Dagger - Fatal编程技术网

Android定制产品口味工作流

Android定制产品口味工作流,android,android-intent,android-build,dagger,Android,Android Intent,Android Build,Dagger,我有一个应用程序,有一系列的产品口味,基本上是一个应用程序的白色标签。然而,偶尔会有一些与主流不同的地方,因为客户机想要一些稍微不同的东西。 到目前为止,我们一直在编辑这些案例的代码,并使用意大利面代码(许多ifs和ELSE)确保其他应用程序不会崩溃。不用说,这不是一种非常可扩展(甚至不明智)的方法 一种选择是在productFlavor源文件夹中编写活动类,即src/flavor1/java/AnActivity.java,src/flavor2/java/AnActivity.java,等等

我有一个应用程序,有一系列的产品口味,基本上是一个应用程序的白色标签。然而,偶尔会有一些与主流不同的地方,因为客户机想要一些稍微不同的东西。 到目前为止,我们一直在编辑这些案例的代码,并使用意大利面代码(许多ifs和ELSE)确保其他应用程序不会崩溃。不用说,这不是一种非常可扩展(甚至不明智)的方法

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

另一种选择是使用类似于
Dagger
的东西来构建
ObjectGraph
并为不同的实现注入意图。例如,如果是
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)
    };
  }
}
public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
ObjectGraph og = ObjectGraph.create(Modules.get(this));
src/flavor2/java/com/myapp/Modules.java

public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor1Module(app)
    };
  }
}
public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
ObjectGraph og = ObjectGraph.create(Modules.get(this));
src/main/java/com/myapp/MyAppApplication.java

public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor1Module(app)
    };
  }
}
public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
ObjectGraph og = ObjectGraph.create(Modules.get(this));
MyAppModule
具有通用依赖项<如果
overrides=true
volvor2module
,则code>volvor1module和
volvor2module
可以提供额外的依赖项或覆盖
MyAppModule
中的依赖项

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)
    };
  }
}
public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
ObjectGraph og = ObjectGraph.create(Modules.get(this));
src/flavor2/java/com/myapp/Modules.java

public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor1Module(app)
    };
  }
}
public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
ObjectGraph og = ObjectGraph.create(Modules.get(this));
src/main/java/com/myapp/MyAppApplication.java

public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor1Module(app)
    };
  }
}
public class Modules {
  public static Object[] get(Application app) {
    return new Object[] {
      new MyAppModule(app),
      new Flavor2Module(app)
    };
  }
}
ObjectGraph og = ObjectGraph.create(Modules.get(this));

MyAppModule
具有通用依赖项<如果
overrides=true
volvor2module
可以提供额外的依赖项,或者覆盖
MyAppModule
中的依赖项!就这样。。。我开始爱上匕首了。。只是另一个有点相关的问题。如果存在对公共依赖项的覆盖,这是否会影响测试中的任何覆盖。换句话说,覆盖可以被覆盖吗?实际上我不确定。我不知道这是怎么处理的。我倾向于说最后一个模块赢了(因为它们已经被订购了),但我必须深入研究。在依赖此行为之前在本地进行实验!是 啊我是想偷懒。谢谢。@JakeWharton,我有同样的问题,但是关于匕首2。你能看看这个吗:哇!就这样。。。我开始爱上匕首了。。只是另一个有点相关的问题。如果存在对公共依赖项的覆盖,这是否会影响测试中的任何覆盖。换句话说,覆盖可以被覆盖吗?实际上我不确定。我不知道这是怎么处理的。我倾向于说最后一个模块赢了(因为它们已经被订购了),但我必须深入研究。在依赖此行为之前在本地进行实验!是 啊我是想偷懒。谢谢。@JakeWharton,我有同样的问题,但是关于匕首2。你能看看这个吗: