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

Android设计/架构:从同一代码库创建不同的应用程序,android,architecture,mobile-application,application-design,Android,Architecture,Mobile Application,Application Design,我想从同一个代码库创建两个应用程序。它们的颜色不同,一些数据来自后端。情况是,假设我想创建App1和App2。两者都有相似的流程。我能 如果标题颜色为App1,则选择蓝色;如果标题颜色为其他,则选择红色 在代码中,如果(运行App==App1){executethispart}else{other 第}部分 如果应用程序为App1,请为“活动”选择layout1.xml,否则请选择 layout2.xml 我不知道该怎么办。任何帮助都会很好 谢谢。如果您使用的是Android Studio,那么

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

  • 如果标题颜色为App1,则选择蓝色;如果标题颜色为其他,则选择红色
  • 在代码中,如果(运行App==App1){executethispart}else{other 第}部分
  • 如果应用程序为App1,请为“活动”选择layout1.xml,否则请选择 layout2.xml
  • 我不知道该怎么办。任何帮助都会很好


    谢谢。

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

    产品风格定义了由项目构建的应用程序的定制版本。单个项目可以有不同的风格,从而改变生成的应用程序

    为了回答这个问题,我们假设您有一个具有两种产品风格的项目,
    flavorOne
    flavorTwo
    。您的项目还将有三个源集:

    • src/main/
      ,你的大部分东西都放在那里
    • src/flavorOne/
      ,一种口味的东西在哪里
    • src/flavorTwo/
      ,另一种口味的东西在哪里
    考虑到这一点

    如果标题颜色为App1,则选择蓝色;如果标题颜色为其他,则选择红色

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

    如果应用程序为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){executethispart}else{other part}

    这在一定程度上取决于您有多少不同的代码

    如果是实质性的,您可以使用策略模式:

    • src/flavorOne/java/

    • src/flavorttwo/java/

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


    如果代码变化非常小,您可以使用
    buildConfigField
    为要添加到
    BuildConfig
    类中的某些新字段(例如
    STUFF
    )提供一个值,其中该值会因风格而异。显示详细信息。

    如果您不使用Android Studio,那么我将提及另一种可能性。对于主要功能,您可以创建一个库项目作为两个应用程序的基础(将其作为库项目选中,并将其作为库包含到两个单独的项目中),然后扩展活动和类,以获得不同的行为

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


    我会推荐Android Studio和Gradle的口味,正如@Commonware的回答,但如果您不使用它,也可以这样做。

    我想您需要Android Studio中Gradle build system中提供的产品口味设置。链接:至于在Play Store上上传这些应用程序,我们需要不同的软件包,那么我们可以将这两种风格的应用程序作为两个不同的应用程序上传吗?@Sagar:当然可以。这就是重点。产品风格为您的分发策略建模,您希望分发N个不同的应用程序,这些应用程序在逻辑上都是相同的应用程序,但有一些细微的变化。我如何在运行时为应用程序选择不同的布局?@RohitShinde:对不起,我不理解您的问题。您可能希望问一个单独的堆栈溢出问题,在这里您可以详细解释您的担忧。@Commonware如果我有两种不同风格的应用程序,那么它们也会有不同的活动布局。那么,我是否要在活动的onCreate方法中指定要充气的布局?如果是这样的话,我如何知道我正在运行的是哪种风格的应用程序?