Android 为产品口味定制工作流程

标签 android android-intent android-build dagger

我有一个应用程序有很多产品口味,这些产品口味基本上是单个应用程序的白色标签。然而,偶尔,由于客户想要稍微不同的东西,所以在某些风格上会与主流有所不同。 到目前为止,我们一直在为这些案例编辑代码并使用意大利面条代码(大量的 ifs 和 elses)来确保其他应用程序不会中断。不用说,这不是一种非常可扩展(甚至理智)的方式来做到这一点。

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

另一种选择可能是使用类似 Dagger 的东西来构建 ObjectGraph 并为不同的实现注入(inject) Intents。例如,如果它是 flavor1,当点击按钮 X 时,一个 ActivityA 的 Intent 被注入(inject),如果它是 flavor2,一个 的 Intent >ActivityB 被注入(inject)。

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

关于实现或其他选项的任何想法?我不受限于 Dagger,我只是开始研究依赖注入(inject)和测试,以便其他框架也能正常工作。

最佳答案

这是我做的...

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 具有共同的依赖关系。如果 overrides=trueFlavor1ModuleFlavor2Module 可以贡献额外的依赖项或覆盖来自 MyAppModule 的依赖项。

关于Android 为产品口味定制工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329584/

相关文章:

android - 单击应用程序小部件(远程 View )中的 ListView 项目未启动 Activity

Android 构建工具 1.1.0,单元测试文件夹?

android - 壁画的 Proguard 错误

android - 引用同一个项目中的一个类,不同的模块

android: Service vs SingleTop Activity 移至后台 - 有什么区别?

android - 创建用于具有自定义分辨率的模拟的 AVD 没有任何导航按钮

android - 在android的videoview中同时播放单独的视频和音频

android - 防止 Android 升级破坏应用程序

android - GPS 状态变化的 Action

android - 从 BroadcastReceiver 接收时 Intent 中缺少额外内容