我正在尝试创建一个风格配置,以避免在每个模块和库gradle文件中出现样板代码。
为此,我尝试转换Piotr Zawadzki解决方案(https://medium.com/stepstone-tech/modularizing-your-flavored-android-project-5db75c59fb0d),它使用groovy with()方法和一个包含风格配置的闭包。
ext.flavorConfig = { // 1
flavorDimensions "pricing"
productFlavors {
free {
dimension "pricing"
ext.myApplicationIdSuffix = '.free' // 2
}
paid {
dimension "pricing"
ext.myApplicationIdSuffix = '.paid'
}
}
productFlavors.all { flavor -> // 3
if (flavor.hasProperty('myApplicationIdSuffix') && isApplicationProject()) {
flavor.applicationIdSuffix = flavor.myApplicationIdSuffix
}
}
}
def isApplicationProject() { // 4
return project.android.class.simpleName.startsWith('BaseAppModuleExtension')
// in AGP 3.1.x with library modules instead of feature modules:
// return project.android instanceof com.android.build.gradle.AppExtension
}我找不到的是Kotlin DSL的等价with()方法,也没有找到转换闭包的适当方法。
发布于 2022-02-15 09:24:22
我用KotlinScript找到了一个解决方案,我想这也可以用Groovy来完成。
首先,在buildSrc/build.gradle.kts文件中添加gradle-api依赖项
//buildSrc/build.gradle.kts
val agpVersion = "7.1.1"
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
google()
}
dependencies{
implementation("com.android.tools.build:gradle-api:$agpVersion")
}然后在buildSrc中创建Gradle插件。
//buildSrc/src/main/kotlin/FooPlugin.kt
abstract class FooPlugin : Plugin<Project> {
override fun apply(project: Project) {
val android = project.extensions.getByType(ApplicationExtension::class.java)
android.defaultConfig {
android.productFlavors.create("Bar")
}
}
}最后,对应用程序的build.gradle.kts应用FooPlugin
//baz/build.gradle.kts
plugins {
...
}
apply<FooPlugin>()
android{
...
}
dependencies {
...
}https://stackoverflow.com/questions/58938678
复制相似问题