Я использовал плагин 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
Каков новый способ использования плагина соглашения для общего расширения в проекте создания реактивного ранца? ⇐ Android
Форум для тех, кто программирует под Android
1771046314
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)
}
}
}
}
А это [b]информационный файл Flavor[/b] и функция [b]configureFlavors[/b]
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79889152/what-is-the-new-way-to-have-convention-plugin-for-common-extension-in-a-jetpack[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия