Свойства каждого вкуса продукта в Gradle

Можно ли создать два файла .properties для двух вариантов продукта в Gradle?

Я создаю приложение для Android с двумя вариантами, и я хочу иметь отдельные свойства для них, но у меня есть проблемы с перезаписанной переменной здесь:

productFlavors {
    flavor1 {
        customProperties = getCustomProperties("flavor1.properties");
    }
    flavor2 {
        customProperties = getCustomProperties("flavor2.properties");
    }
}

Моя переменная customProperties всегда получает значения из свойств flav2, даже я строю flav1.

Что я делаю неправильно?:)

upd: defaultConfig:

 defaultConfig {
    minSdkVersion 17
    targetSdkVersion 22
    // Enabling multidex support.
    multiDexEnabled true
}

1 ответ

Решение

Вам также следует изменить вариант сборки и выбрать правильный вариант, чтобы применить каждую конфигурацию для нужного варианта.

В качестве альтернативы, если у вас есть только несколько полей в файле свойств и вы просто хотите разные значения для каждого варианта: вы можете использовать BuildConfigFields следующим образом:

buildConfigField 'String', 'FIELD1', '"value1"'
buildConfigField 'String', 'FIELD2', '"value2"'
buildConfigField "String", "FIELD3", "value2"

К ним можно получить доступ в любом месте проекта, используя класс BuildConfig следующим образом:

BuildConfig.FIELD1
BuildConfig.FIELD2
BuildConfig.FIELD3

Я использую что-то вроде этого:

flavorDimensions "default"
    productFlavors {
        stand {

            def standPropsFile = file("${project.projectDir}/../stand.properties")
            Properties standProps = new Properties()
            if (standPropsFile.canRead()) {
                standProps.load(new FileInputStream(standPropsFile))
            }
            manifestPlaceholders = standProps
            applicationId = manifestPlaceholders["APP_ID"]
        }

        google {
            def standPropsFile = file("${project.projectDir}/../google.properties")
            Properties standProps = new Properties()
            if (standPropsFile.canRead()) {
                standProps.load(new FileInputStream(standPropsFile))
            }
            manifestPlaceholders = standProps
            applicationId = manifestPlaceholders["APP_ID"]
        }
    }

manifestPlaceholder - это просто установщик для Map mManifestPlaceholder, поэтому после "manifestPlaceholder = standProps" вы можете использовать значения прямо по ключу, как вы записали его в файл.properties.

Другие вопросы по тегам