自定义 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 访问您的类型。
我有一个要求,我有 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 访问您的类型。