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

peu*_*hse 26 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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Fif*_*eep 54

塞尔文是正确的,使用defaultConfig封闭 - 没有更简洁的方式!在以下示例中,flavor 1,2和5将默认国家/地区和语言设置为de.Flavors 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

注意

只是一个FYI,您可以使用该方法将name.capitalize()任何风味的名称flavor5转换为应用程序名称- 这将使String中的第一个字符大写.然而,这必须是味道,而不是Flavor5capitalize()defaultConfig