无法在 productFlavors 中添加 buildConfigField

14
在我的android{}部分,我尝试为我的免费和付费应用程序设置两种不同的构建类型。
可悲的是,我遇到了gradle错误:
Gradle“android-Transport”项目刷新失败:构建脚本错误,找到不支持的Gradle DSL方法:“buildConfigField()”!可能的原因可能是:-您正在使用缺少该方法的Gradle版本-您没有应用提供该方法的Gradle插件-或者有一个构建脚本中的错误。
这是我的gradle构建中的android{}部分:
android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }

        debug {
            debuggable true
            runProguard false
        }
    }

    productFlavors {
        free {
            packageName "pl.grzeslowski.transport.free"
            buildConfigField "transport.product_flavors.MonetizationType" "MONETIAZATION_TYPE" "transport.product_flavors.MonetizationType.FREE"
        }

        paid {
            packageName "pl.grzeslowski.transport.paid"
            buildConfigField "transport.product_flavors.MonetizationType" "MONETIAZATION_TYPE" "transport.product_flavors.MonetizationType.PAID"
        }
    }
}

这是我的控制台日志:

执行任务:[:transport:compileDebugJava] 按需配置是一项孵化功能。下载 http://repo1.maven.org/maven2/com/android/tools/build/gradle/0.8.3/gradle-0.8.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/lint/lint/22.5.3/lint-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/build/builder/0.8.3/builder-0.8.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/lint/lint-checks/22.5.3/lint-checks-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/sdklib/22.5.3/sdklib-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/ddms/ddmlib/22.5.3/ddmlib-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/build/builder-model/0.8.3/builder-model-0.8.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/build/manifest-merger/22.5.3/manifest-merger-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/sdk-common/22.5.3/sdk-common-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/build/builder-test-api/0.8.3/builder-test-api-0.8.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/common/22.5.3/common-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/lint/lint-api/22.5.3/lint-api-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/dvlib/22.5.3/dvlib-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/layoutlib/layoutlib-api/22.5.3/layoutlib-api-22.5.3.pom 下载 http://repo1.maven.org/maven2/com/android/tools/build/gradle/0.8.3/gradle-0.8.3.jar 下载 http://repo1.maven.org/maven2/com/android/tools/lint/lint/22.5.3/lint-22.5.3.jar 下载 http://repo1.maven.org/maven2/com/android/tools/build/builder/0.8.3/builder-0.8.3.jar 下载 http://repo1.maven.org/maven2/com/android/tools/lint/lint-checks/22.5.3/lint-checks-22.5.3.jar 构建失败,发生异常。
  • 位置:Build file 'D:\Programowanie\GitProjects\transport\android-Transport\transport\build.gradle' line: 77

  • 出现了什么问题:评估项目':transport'时发生问题。

    在GroupableProductFlavorDsl_Decorated{name=free, minSdkVersion=-1, targetSdkVersion=-1, renderscriptTargetApi=-1, renderscriptSupportMode=null, renderscriptNdkMode=null, versionCode=-1, versionName=null, packageName=transport.free, testPackageName=null, testInstrumentationRunner=null, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null}上找不到方法buildConfigField(),参数为[transport.product_flavors.MonetizationType]。

  • 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。

构建失败 总时间:9.781

你检查过 buildConfigField 行的语法是否正确了吗?我认为你可能在字符串之间漏掉了一些逗号。 - Peter Niederwieser
buildConfigField应该有3个字符串。我不知道是否需要packages。 - MAGx2
2
就像我之前所说的一样,这些字符串需要用逗号(,)分隔。 - Peter Niederwieser
加逗号可以正常工作:)。谢谢。如果您将其放入答案中,我会接受它。 - MAGx2
2个回答

33

buildConfigField行的正确语法是:

buildConfigField "boolean", "MY_FLAG", "true"

换句话说,这些字符串需要用逗号分隔。


如何在不同的版本中获得相同的结果?如果我为不同的版本定义变量,则会收到相同的错误日志。有什么建议吗? - CoDe

1
在我的情况下:
buildConfigField ("transport.product_flavors.MonetizationType", "MONETIAZATION_TYPE", "transport.product_flavors.MonetizationType.FREE")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接