Я использовал плагин Convention для **`ApplicationExtension`** и **`LibraryExtension`**, но новая версия **Android Gradle Plugin (AGP)**, похоже, не поддерживает некоторые расширения, такие как **Common Extension**.
Как я могу решить эту проблему в AGP 9.0.0?
class FlavorsConventionPlugin : Plugin
{
override fun apply(project: Project) {
project.plugins.withId("com.android.library") {
project.extensions.configure {
configureFlavors(this, project)
}
}
project.plugins.withId("com.android.application") {
project.extensions.configure {
configureFlavors(this, project)
}
}
}
}
А это информационный файл Flavor и функция configureFlavors
enum class Dimension {
TEST
}
@Suppress("EnumEntryName")
enum class Flavor(
val dimension: Dimension,
val applicationIdSuffix: String? = null,
val versionNameSuffix: String? = null
) {
dev(
dimension = Dimension.TEST,
applicationIdSuffix = ".dev",
versionNameSuffix = "-dev"
),
uat(
dimension = Dimension.TEST,
applicationIdSuffix = ".uat",
versionNameSuffix = "-uat"
),
prod(dimension = Dimension.TEST),
}
fun configureFlavors(
commonExtension: CommonExtension,
project: Project,
flavorConfigurationBlock: ProductFlavor.(flavor: Flavor) -> Unit = {},
) {
val props = loadFlavorProperties(project)
commonExtension.apply {
Dimension.entries.forEach { flavorDimension ->
flavorDimensions += flavorDimension.name
}
productFlavors {
Flavor.entries.forEach { flavor ->
register(flavor.name) {
dimension = flavor.dimension.name
val walletUrl = props["$flavor.WALLET_BASE_URL"] as? String
val authUrl = props["$flavor.AUTH_BASE_URL"] as? String
if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) {
if (flavor.applicationIdSuffix != null)
applicationIdSuffix = flavor.applicationIdSuffix
if (flavor.versionNameSuffix != null)
versionNameSuffix = flavor.versionNameSuffix
}
buildConfigField("String", "WALLET_BASE_URL", "\"$walletUrl\"")
buildConfigField("String", "AUTH_BASE_URL", "\"$authUrl\"")
buildFeatures.buildConfig = true
flavorConfigurationBlock(this, flavor)
}
}
}
}
}
private fun loadFlavorProperties(project: Project): Properties {
val props = Properties()
val file = project.rootProject.file("flavors.properties")
if (file.exists()) {
props.load(file.inputStream())
} else {
throw GradleException("Missing flavors.properties file at project root.")
}
return props
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-jetpack