Android设计/架构:从相同的代码库创建不同的应用程序

Sag*_*gar 3 architecture android application-design mobile-application

我想从相同的代码库创建两个应用程序.它们的颜色不同,有些数据来自后端.情况就像,让我说我想创建应用程序App1和App2.两者都有类似的流程.我可以吗,

  1. 选择标题颜色蓝色(如果是App1)和红色是否为其他?
  2. 在代码中,如果(运行App == App1){执行此部分}否则{其他部分}?
  3. 如果App是App1,选择layout1.xml进行活动,那么选择layout2.xml?

我不知道该如何解决这个问题.任何帮助都会很棒.

谢谢.

Com*_*are 9

如果您使用的是Android Studio,那么您所描述的就是产品风格.引用文档:

产品风格定义项目构建的应用程序的自定义版本.单个项目可以有不同的风格,可以更改生成的应用程序.

出于这个答案的目的,让我们假设你有一个项目有两种产品风格,flavorOneflavorTwo.您的项目还有三个源集:

  • src/main/,你的大部分东西都去了
  • src/flavorOne/,一种口味的东西去
  • src/flavorTwo/,其他味道的东西去

考虑到这一点...

选择标题颜色蓝色(如果是App1)和红色是否为其他?

src/main/res/values/colors.xml,定义一个名为的颜色header,并给它一个蓝色值.在src/flavorTwo/res/values/colors.xml,定义一个名为的颜色header,并为其指定一个红色值.应用程序的其余部分引用header颜色(例如@color/header,R.color.header).构建时flavorOne,main将使用颜色.构建时flavorTwo,该flavorTwo值将覆盖该main值.

如果App是App1,选择layout1.xml进行活动,那么选择layout2.xml?

src/main/res/layout/thingy.xml,定义您的默认布局实现.在src/flavorTwo/res/layout/thingy.xml,定义要用于的布局flavorTwo.您的Java代码将引用R.layout.thingy.构建时flavorOne,main将使用布局.构建时flavorTwo,flavorTwo布局将覆盖main布局.

在代码中,如果(运行App == App1){执行此部分}否则{其他部分}?

这取决于你有多少代码变化.

如果它很重要,您可以使用策略模式:

  • 有一个执行StuffStrategysrc/flavorOne/java/

  • 有另一种实现方式StuffStrategysrc/flavorTwo/java/

  • 在您的src/main/java代码中,请参阅StuffStrategy,它将根据您正在构建的风格引入正确的实现

如果代码变体实际上是微不足道的,那么您可以使用buildConfigField为某个新字段(例如STUFF)提供一个值来添加到BuildConfig类中,其中该值会因风格而异.此Stack Overflow答案显示详细信息.