首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BuildSrc中创建FlavorConfig?

如何在BuildSrc中创建FlavorConfig?
EN

Stack Overflow用户
提问于 2019-11-20 00:25:24
回答 2查看 256关注 0票数 2

我正在尝试创建一个风格配置,以避免在每个模块和库gradle文件中出现样板代码。

为此,我尝试转换Piotr Zawadzki解决方案(https://medium.com/stepstone-tech/modularizing-your-flavored-android-project-5db75c59fb0d),它使用groovy with()方法和一个包含风格配置的闭包。

代码语言:javascript
复制
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()方法,也没有找到转换闭包的适当方法。

EN

回答 2

Stack Overflow用户

发布于 2019-11-20 16:26:51

等价物应该是applyrun,这取决于with的实际返回值是什么(由于某种原因,我无法理解)。

票数 0
EN

Stack Overflow用户

发布于 2022-02-15 09:24:22

我用KotlinScript找到了一个解决方案,我想这也可以用Groovy来完成。

首先,在buildSrc/build.gradle.kts文件中添加gradle-api依赖项

代码语言:javascript
复制
//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插件。

代码语言:javascript
复制
//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

代码语言:javascript
复制
//baz/build.gradle.kts

plugins {
    ...
}

apply<FooPlugin>()

android{
    ...
}

dependencies {
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58938678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档