buildConfigField取决于flavor + buildType

Mar*_*ues 15 android android-gradle-plugin android-productflavors

我试图定义一个buildConfigVariable取决于香精 + buildType.理想情况下,这就是我想要的

productFlavors {
    strawberry {
        buildConfigField "String", "WS_API_KEY", name + variant.buildType.name
    }
    ... more flavors ..
}
Run Code Online (Sandbox Code Playgroud)

name确实包含"strawberry",但我不知道是否可以访问variantbuildType.

放置在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"]
Run Code Online (Sandbox Code Playgroud)

我可以轻松地创建一个Java工厂并API_KEY根据一些BuildConfig常量返回适当的,但我宁愿保持代码配置不可知.

Xav*_*het 15

Edit2:0.14.2之后的版本允许这样做:

applicationVariants.all { variant ->
    variant.buildConfigField "int", "VALUE", "1"
}
Run Code Online (Sandbox Code Playgroud)

所以你可以做这样的事情(以匹配原始问题):

applicationVariants.all { variant ->
    variant.buildConfigField "String", "WS_API_KEY", variant.productFlavors.get(0).name + '_' + variant.buildType.name
}
Run Code Online (Sandbox Code Playgroud)

编辑:目前无法实现.缺少API.错误:https://code.google.com/p/android/issues/detail? id = 67416

试试这个:

applicationVariants.all { variant ->
    variant.mergedFlavor.buildConfigField "String", "NAME", '"VALUE"'
}
Run Code Online (Sandbox Code Playgroud)

  • 这看起来很丑陋,但我想现在没有更好的办法了.我们必须改进这一点.https://code.google.com/p/android/issues/detail?id=67416 (3认同)