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

我有一个产品有多种产品口味,如:

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)放在它自己的文件中,以使它更具可读性。 因此,每当你必须改变一种味道时,你可以很容易地在它自己的文件中find它,而不必滚动数千行,如果我有所有的味道和buildTypes以及主构建文件中的所有其他部分。

Selvin是正确的,使用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() } } 

注意

只是一个FYI,您可以使用name.capitalize()通过使用capitalize()方法将任何flavor的名称(例如flavor5 )转换为Flavor5的应用程序名称 – 这将使String中的第一个字符大写。 但是,这必须是味道,而不是defaultConfig