Android gradle 3.0.0 buildConfigField предупреждение после обновления
Недавно я установил последнюю версию Canary на базе Android Studio, в которой в настоящее время используется плагин Android Gradle 3.0.0-alpha4
(предыдущий был 2.3.3
).
Теперь я получаю предупреждение для всех моих buildConfigFields:
buildTypes {
def BOOLEAN = "boolean"
def STRING = "String"
def INT = "int"
def TRUE = "true"
def FALSE = "false"
def SOME_PER_BUILD_TYPE_FIELD = "SOME_PER_BUILD_TYPE_FIELD"
debug {
buildConfigField BOOLEAN, SOME_PER_BUILD_TYPE_FIELD, FALSE
}
release {
buildConfigField BOOLEAN, SOME_PER_BUILD_TYPE_FIELD, TRUE
}
Предупреждения читаются следующим образом:
Warning:BuildType(debug): buildConfigField 'SOME_PER_BUILD_TYPE_FIELD' value is being replaced: false -> false
Warning:BuildType(debug): buildConfigField 'SOME_STRING_FIELD' value is being replaced: "999" -> "999"
И для их разных полей и типов сборки существует как 100 из них. Как я могу их исправить и что на самом деле предупреждает меня?
Ответы
Ответ 1
Система сборки предупреждает вас, что некоторая buildConfigField
повторно назначается.
Два отображаемых поля переустанавливаются на одно и то же значение, которое указывает, что может произойти один из следующих сценариев:
- ваша сборка script неверно сконфигурирована и оценивает некоторое выражение дважды
- у вашей сборки script есть дубликаты присвоений
- gradle сам по себе дважды вычисляет конструкцию script и предупреждает вас о своих действиях
Ответ 2
Причина правильно указана Василием. Просто добавить немного к этому, одна из возможных причин этого может быть, когда у вас есть buildType, который инициализируется с любым другим buildType. например, рассмотрим следующие конфигурации сборки:
debug {
buildConfigField 'boolean', 'ENABLE_CRASH_REPORTING', 'false'
}
stage {
initWith(buildTypes.debug)
buildConfigField 'boolean', 'ENABLE_CRASH_REPORTING', 'true'
}
release {
buildConfigField 'boolean', 'ENABLE_CRASH_REPORTING', 'true'
}
В этом случае вы получите предупреждение для этапа buildType
Предупреждение: BuildType (stage): значение 'ENABLE_CRASH_REPORTING' buildConfigField заменяется: false → true
Причина довольно проста и очевидна, что stage наследует все поля от отладки, а затем stage заменяет его, потому что вы можете назначить им другое значение для stage (как в случае выше). Возможным обходным путем может быть замена
initWith(buildTypes.debug)
с
signingConfig signingConfigs.debug
Это устранит ошибку подписи, которую вы обычно получаете при сборке этапов сборки. Но главное отличие здесь в конфигурации сейчас; Этап не будет наследовать переменные сборки отладки в этом случае, и поэтому вы также не получите никакого предупреждения для этого. Также в этом случае вам придется переопределить все переменные сборки на этапе, поскольку (уже упоминавшийся) этап больше не наследуется от отладки.
Ответ 3
Самое наивное решение - переместить все buildConfigField
раздела debug
раздел defaultConfig
.