我想从相同的代码库创建两个应用程序。它们的颜色不同,有些数据来自后端。情况就像,让我说我想创建应用程序App1和App2。两者都有类似的流程。我能吗,
我不知道该如何解决这个问题。任何帮助都会很棒。
谢谢。
答案 0 :(得分:9)
如果您使用的是Android Studio,那么您所描述的就是产品风格。引用the documentation:
产品风格定义项目构建的应用程序的自定义版本。单个项目可以有不同的风格,可以更改生成的应用程序。
出于本答案的目的,让我们假设您有一个项目有两种产品风格,flavorOne
和flavorTwo
。您的项目还有三个源集:
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){执行此部分}否则{其他部分}?
这取决于你所拥有的代码有多大。
如果它很重要,您可以使用策略模式:
在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的回答一样,但是如果你不使用它,你也可以这样做。