Мне пришлось изменить несколько вещей в вышеприведенном, чтобы он работал:
- Карта вкуса (здесь appLabelMap) должна go в applicationVariants, так что вы можете использовать ее сразу.
- ManifestPlaceHolders действительно является значением val, но вы можете заменить значения на карте. :)
- applicationVariants.forEach не выполняется, поэтому вы должны использовать applicationVariants.all. Но имейте в виду, что он конфликтует (вроде как) с koltin.collections.all (), поэтому вместо замыкания вы должны использовать тот, который выполняет действие.
Это конечный результат:
applicationVariants.all {
val appLabelMap = when (this.buildType.name) {
"debug" -> mapOf("flavorA" to "FlavorA Debug", "flavorB" to "FlavorB Debug")
...
else -> mapOf("flavorA" to "FlavorA", "flavorB" to "FlavorB")
}
val flavor = this.productFlavors[0]
this.mergedFlavor.manifestPlaceholders["applicationLabel"] = "${appLabelMap[flavor.name]}"
}
Вы также должны установить значение по умолчанию для applicationLabel в android .defaultConfig:
android.defaultConfig { manifestPlaceholders["applicationLabel"] = "FlavorA"}
Это релевантная часть AndroidManifest. xml, на всякий случай, если это не так ясно:
<application
android:label="${applicationLabel}"
...
<activity
...>
...
</activity>
...
</application>
Если вы знаете, как это сделать, это выглядит просто!