自定义 src 文件夹的文件夹名称的 gradle 风格问题

Issue with gradle flavor with folder name for custom src folder

我有一个要求,我有 4 种口味,每一种口味都有一组两种口味,它们具有共同的源代码,而它们的区别仅在于 buildConfigField[= 中定义的一个特定参数23=]。我面临的问题是,当我为配置创建构建时,假设 "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\""
 } 
}
        }

这是一个示例,您可以轻松地实现它。

SpecificParameter.java

public class SpecificParameter {
    public static ParameterType getParameter() {
        return parameter;
    }
}

并且在您的 buildConfigField 中,您可以设置参数,例如,

parameter = SpecificParameter.getParameter();

并将 4 SpecificParameter.java 放入您的调味包中。这样你的口味就会像适配器一样工作,你的构建文件将是单一的,并从你的口味中获取你的参数。

编辑:

如果您正在使用我所理解的构建配置,您可以像这样使用它,枚举可以帮助您,比字符串更好,但这是我的意见:)。

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