Подтвердить что ты не робот

Есть ли способ иметь общий раздел с buildConfigField и resValue в 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 вместе со всеми остальными в основном файле сборки.

4b9b3361

Ответ 1

Selvin верен, используйте defaultConfig close - нет более аккуратного способа!. В следующем примере ароматы 1, 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