Каков новый способ использования плагина соглашения для общего расширения в проекте создания реактивного ранца?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Каков новый способ использования плагина соглашения для общего расширения в проекте создания реактивного ранца?

Сообщение Anonymous »

Я использовал плагин 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»