我试图根据味道+ buildType定义一个buildConfigVariable。理想情况下,这就是我想要的

productFlavors {
    strawberry {
        buildConfigField "String", "WS_API_KEY", name + variant.buildType.name
    }
    ... more flavors ..
}

名称确实包含“草莓”,但我不知道是否有可能访问该变体的buildType。

放置在Android闭包之外,我可以访问BuildType和变体,但是我无法调用buildConfigField
android.applicationVariants.all { variant ->
    println "****************************"
    println "variant: ${variant.name}"
    println "flavor: ${variant.flavorName}"
    println "****************************"

    if (variant.buildType.name == 'release') {
        if (variant.flavorName == 'strawberry') {
            buildConfigField "String", "WS_API_KEY", '"strawberry_release"'
        } else {
            buildConfigField "String", "WS_API_KEY", '"chocolate_release"'
        }
    } else if(variant.buildType.name == 'debug') {
        if (variant.flavorName == 'strawberry') {
            buildConfigField "String", "WS_API_KEY", '"strawberry_debug"'
        } else {
            buildConfigField "String", "WS_API_KEY", '"chocolate_debug"'
        }
    }


****************************
variant: strawberryRelease
flavor: strawberry
****************************
org.gradle.api.internal.MissingMethodException:
    Could not find method buildConfigField()
    for arguments [String, WS_API_KEY, "strawberry_release"]

我可以轻松地创建Java工厂并根据一些API_KEY常量返回适当的BuildConfig,但我希望代码配置不可知。

最佳答案

Edit2:0.14.2之后的版本将允许执行以下操作:

applicationVariants.all { variant ->
    variant.buildConfigField "int", "VALUE", "1"
}

这样您就可以执行以下操作(以匹配原始问题):
applicationVariants.all { variant ->
    variant.buildConfigField "String", "WS_API_KEY", variant.productFlavors.get(0).name + '_' + variant.buildType.name
}

编辑:目前不可能。为此,缺少API。
错误:https://code.google.com/p/android/issues/detail?id=67416

尝试这个:
applicationVariants.all { variant ->
    variant.mergedFlavor.buildConfigField "String", "NAME", '"VALUE"'
}

关于android - buildConfigField取决于味道+ buildType,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22506290/

10-08 23:52