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

时间:2015-03-25 19:42:07

标签: android architecture mobile-application application-design

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

  1. 选择标题颜色为蓝色(如果为App1)和红色为其他?
  2. 在代码中,if(运行App == App1){执行此部分}否则{other 一部分}?
  3. 如果App是App1,请选择layout1.xml进行活动,然后选择 layout2.xml?
  4. 我不知道该如何解决这个问题。任何帮助都会很棒。

    谢谢。

2 个答案:

答案 0 :(得分:9)

如果您使用的是Android Studio,那么您所描述的就是产品风格。引用the documentation

  

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

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

  • src/main/,你的大部分内容都在哪里
  • src/flavorOne/,其中包含一种口味的东西
  • src/flavorTwo/,其他味道的东西

考虑到这一点......

  

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

src/main/res/values/colors.xml中,定义名为header的颜色,并为其指定蓝色值。在src/flavorTwo/res/values/colors.xml中,定义名为header的颜色,并为其指定红色值。应用的其余部分引用header颜色(例如@color/headerR.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){执行此部分}否则{其他部分}?

这取决于你所拥有的代码有多大。

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

  • StuffStrategy

  • 中有一个src/flavorOne/java/的实现
  • StuffStrategy

  • 中另有src/flavorTwo/java/的实施方式
  • 在您的src/main/java代码中,请参阅StuffStrategy,它会根据您正在构建的风格引入正确的实现

如果代码变体非常简单,您可以使用buildConfigField为要添加到STUFF类的某个新字段(例如BuildConfig)提供一个值,其中价值因风味而异。 This Stack Overflow answer显示详细信息。

答案 1 :(得分:1)

如果你使用Android Studio,那么我会提到另一种可能性。对于主要功能,您可以创建一个库项目作为两个应用程序的基础(将其作为库项目检查,并将其作为库包含在两个分离的项目中),然后扩展活动,您希望最终得到的类不同的行为。

例如(简单的),如果你有两个具有不同初始布局的应用程序,让我们说splash.xml,你可以在库项目中创建这个默认的应用程序,并在布局文件夹中创建另一个在其他项目的资源目录中使用相同的名称。第二个项目将使用它自己的布局文件夹中的那个。

我会推荐Android Studio和Gradle,就像@ CommonsWare的回答一样,但是如果你不使用它,你也可以这样做。