我有一个要求,我有4种味道,每种味道都有两种味道的组有共同的源代码,而它们只是由 buildConfigField 中定义的一个特定参数不同。我面临的问题是,当我为配置创建构建时,请说“#sm; halfsmiledebug"我没有从halfsmile文件夹获取源代码到主源代码文件夹。我收到编译错误。
我的项目结构是
SmileProject
|
|---SmileAndroidApplication
|--src
|-main
|-halfsmile
|-fullsmile
并且有4种味道
-halfsmilewithyellowteeth
-halfsmilewithwhiteteeth
-fullsmilewithyellowteeth
-fullsmilewithyellowteeth
我已将源目录定义为
sourceSets{
main
{
java.srcDirs = ['src/main/java']
}
halfsmilewithyellowteeth
{
java.srcDirs = ['src/halfsmile/java']
}
halfsmilewithwhiteteeth
{
java.srcDirs = ['src/halfsmile/java']
}
fullsmilewithyellowteeth
{
java.srcDirs = ['src/halfsmile/java']
}
fullsmilewithwhiteteeth
{
java.srcDirs = ['src/halfsmile/java']
}
productFlavors
{
halfsmilewithyellowteeth
{
buildConfigField "String", "TYPEOFTEETH", "\"YELLOW\""
}
halfsmilewithwhiteteeth
{
buildConfigField "String", "TYPEOFTEETH", "\"WHITE\""
} fullsmilewithyellowteeth
{
buildConfigField "String", "TYPEOFTEETH", "\"YELLOW\""
}
fullsmilewithwhiteteeth
{
buildConfigField "String", "TYPEOFTEETH", "\"WHITE\""
}
}
}
答案 0 :(得分:1)
以下是一个如何轻松实现它的示例。
SpecificParameter.java
public class SpecificParameter {
public static ParameterType getParameter() {
return parameter;
}
}
并在buildConfigField中,您可以设置参数,如
parameter = SpecificParameter.getParameter();
并将4个SpecificParameter.java放入您的flavor包中。这样你的口味就像一个适配器,你的构建文件将是单一的,并从你的口味中获取你的参数。
编辑:
如果您正在使用我理解的buildconfig,您可以像这样使用它,并且枚举可以帮助您使用这些,比字符串更好,但这是我的意见:)。
TeethType.java
public enum TeethType {
YELLOW, WHITE
}
and in your gradle
productFlavors {
halfsmile {
...
}
fullsmile {
...
}
}
buildTypes {
whiteteeth {
...
buildConfigField "...TeethType", "TEETHTYPE", "...TeethType.WHITE"
}
yellowteeth {
...
buildConfigField "...TeethType", "TEETHTYPE", "...TeethType.YELLOW"
}
}
通过这种方式,您将拥有2种口味和2种构建类型。在您的构建变体中,您将看到4种类型。您可以随时访问BuildConfig.TEETHTYPE访问您的类型。