В компании, где я работаю, мы используем много вкусов в наших внутренних и внешних проектах. Плюс 2 или 3 типа сборки тоже (dev, prod и qa), и иногда нам нужно изменять определенные переменные в определенном buildType внутри аромата.
Вот где проблема возникает, когда у меня есть еще один аромат, Groovy всегда принимает конфигурации последнего типа buildType.
Пример:
Прежде всего, я определяю новые типы buildTypes:
android {
...
buildTypes {
development {
initWith debug
}
production {
initWith release
}
}
...
}
Затем я определяю ароматы с конкретными изменениями buildType:
productFlavors {
mcDonalds {
...
buildTypes {
development {
manifestPlaceholders = [onesignal_app_id : "4b77f560-26f3-420d-b438-d7aeb9912d4d",
onesignal_google_project_number: "REMOTE"]
}
production {
manifestPlaceholders = [onesignal_app_id : "6b77f560-26f3-420d-b438-d7aeb9912d33",
onesignal_google_project_number: "REMOTE"]
}
}
}
burgerKing {
...
buildTypes {
development {
manifestPlaceholders = [onesignal_app_id : "8b77f560-26f3-420d-b438-d7aeb9912d44",
onesignal_google_project_number: "REMOTE"]
}
production {
manifestPlaceholders = [onesignal_app_id : "0b77f560-26f3-420d-b438-d7aeb9912456",
onesignal_google_project_number: "REMOTE"]
}
}
}
}
Независимо от вкуса, который я выбираю для сборки, gradle всегда будет принимать значения из последнего вкуса, и когда я отправлю push-уведомление пользователям mcDonalds, все пользователи burgerKing получат объявления о большом mac.
Google сказал, что он предназначен, и этого не произойдет, если я использую build.gradle.ktl. Я не понимаю, как они могут сказать, что это предназначено. Для меня это проблема Groovy, это ошибка, и все больше людей сообщают о той же проблеме в трекере проблем.
Какое обходное решение вы предлагаете?
Пожалуйста, не советуйте мне использовать другое измерение, это не сработает, потому что конфигурации меняются в каждом стиле flavor/buildType, и я думаю, что это смешно в отношении количества вариантов сборки:
- mcDonaldsDevelopmentDebug
- mcDonaldsDevelopmentRelease
- mcDonaldsProductionDebug
- mcDonaldsProductionRelease
- burgerKingDevelopmentDebug
- burgerKingDevelopmentRelease
- burgerKingProductionDebug
- burgerKingProductionRelease
Все, что мне нужно, это что-то вроде этого:
- mcDonaldsDevelopment
- mcDonaldsProduction
- burgerKingDevelopment
- burgerKingProduction