gradle flavor与自定义src文件夹的文件夹名称一起出现问题

时间:2015-06-01 11:21:51

标签: android android-gradle build.gradle

我有一个要求,我有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\""
 } 
}
        }

1 个答案:

答案 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访问您的类型。