有没有办法在gradle中使用buildConfigField和resValue的公共部分?

时间:2014-09-23 11:39:08

标签: android gradle

我的产品有多种产品口味,如:

buildTypes {
    debug {
    }

    release {
    }

}

productFlavors {
    flavor1 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor1"
    }
    flavor2 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor2"
    }
    flavor3 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor3"
    }
    flavor4 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "sv-SE"
        buildConfigField "String" "appName" "Flavor4"
    }
    flavor5 {
        buildConfigField "String" "country" "se"
        buildConfigField "String" "language" "no-NO"
        buildConfigField "String" "appName" "Flavor5"
    }
}

我更喜欢具有所有属性的公共部分,并且只覆盖那些不同的部分。这可能吗?

我还想将所有风格(也许是buildTypes)放在它自己的文件中,以使其更具可读性。因此,每当你必须改变一种味道时,你可以很容易地在它自己的文件中找到它,而不必滚动数千行,如果我将所有的味道和buildTypes与主构建文件中的所有其他部分一起使用。

1 个答案:

答案 0 :(得分:51)

Selvin是正确的,使用defaultConfig关闭 - 没有更简洁的方法!在下面的示例中,第1节,第2节和第2节。 5会将默认国家/地区和语言设置为de。香精3& 4用他们自己的语言覆盖它。

defaultConfig {
    buildConfigField "String", "country", "de"
    buildConfigField "String", "language", "de"
}

buildTypes {
    debug {
    }

    release {
    }
}

productFlavors {
    flavor1 {
        buildConfigField "String", "appName", "Flavor1"
    }
    flavor2 {
        buildConfigField "String", "appName", "Flavor2"
    }
    flavor3 {
        buildConfigField "String", "country", "uk"
        buildConfigField "String", "language", "en_GB"
        buildConfigField "String", "appName", "Flavor3"
    }
    flavor4 {
        buildConfigField "String", "country", "fr"
        buildConfigField "String", "language", "fr"
        buildConfigField "String", "appName", "Flavor4"
    }
    flavor5 {
        buildConfigField "String", "appName", name.capitalize()
    }
}

注意

只是一个FYI,您可以使用name.capitalize()来改变任何风味的名称,例如: flavor5使用Flavor5方法将应用名称capitalize()添加到应用名称中 - 这将使字符串中的第一个字符大写。但是,这个必须才有风味,而不是defaultConfig