使用整数变量gradle buildConfigField

时间:2016-07-22 10:33:55

标签: android variables gradle buildconfig android-buildconfig

我想定义一个构建配置文件,我可以使用gradle脚本中自定义的变量:

def someVar = 512
android {
...
    buildConfigField 'int', 'SOME_INT_FIELD',  someVar
}

但这会产生以下错误:

  

错误:(25,0)未找到Gradle DSL方法:'buildConfigField()'

     

可能的原因:   

  • 项目'PROJECT'可能正在使用不包含该方法的Gradle版本。
  •   
  • 构建文件可能缺少Gradle插件。
  • 我可以使用像:

    这样的引号
    def someVar = 0
    android {
    ...
        buildConfigField 'int', 'SOME_INT_FIELD',  '"' + someVar + '"'
    }
    

    但这会导致 BuildConfig

    中的编译器错误
    // Fields from default config.
    public static final int SOME_INT_FILED = "512";
    

    所以现在我留下来:

    def someVar = 0
    android {
    ...
        buildConfigField 'String', 'SOME_INT_FIELD',  '"' + someVar + '"'
    }
    

    并使用它:

    final int value = Integer.valueOf(BuildConfig.SOME_INT_FIELD);
    

    有没有人有更好的解决方案,还是我使用buildConfigField错误?

    (我也尝试将括号与上述任何可能性结合使用。)

    5 个答案:

    答案 0 :(得分:30)

    我找到了一个解决方案,所以这个答案可能会在将来帮助某人。

    def String globalVersionCode
    
    defaultConfig {
        applicationId "com.test.gradle.build"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "0.1"
    
        globalVersionCode = versionCode
    }
    
    buildTypes {
        release {
             buildConfigField ("int", "DatabaseVersion", globalVersionCode)
        }
    }
    

    现在在java中我可以得到DatabaseVersion变量:

    public static final int DB_VERSION = BuildConfig.DatabaseVersion;
    

    答案 1 :(得分:4)

    int中声明build.gradle字段不应该也不需要在java端进行解析。代码中唯一的错误就是使用双引号。正确的方法如下 -

    buildConfigField 'int', 'SOME_INT_FIELD', '512'
    

    使用上面的build.gradle文件,您可以在java代码中将其简单地用作int -

    public static final int SOME_INT_FIELD = BuildConfig.SOME_INT_FIELD;
    

    答案 2 :(得分:3)

    试试这个:

    int val = 10
    buildConfigField 'int', 'SOME_INT_FIELD', val.toString()
    

    答案 3 :(得分:0)

    def someVar = 100
    
    buildConfigField 'int', 'SOME_INT_FIELD',  String.valueOf(someVar)
    

    我用以上方法解决了问题,希望对您有所帮助。

    答案 4 :(得分:0)

    您可能会因为某些原因使用相同的 gradle 文件并在 java 文件中使用。

    def boolean isMyFlag
    
    compileSdkVersion 30
    defaultConfig {
        applicationId "com.test.gradle.build"
        minSdkVersion 21
        targetSdkVersion 22
        buildConfigField 'int', 'Version_code', "3"
        buildConfigField 'String', 'Version_Name', "'0.1'"
        buildConfigField "boolean", "myFlag", "${isMyFlag}"
    
    }
    

    现在你可以在java和gradle文件中使用了。

    // Use for Java
    if(BuildConfig.myFlag){
        // My logic here;
    }
    

    // Use for gradle
    if (isMyFlag) {
        implementation 'com.my.dependency.classes:my-module:2.3'
    }
    

    我的解决方案适用于 Java 和 build.gradle 文件,因为您可能会得到一些这样的逻辑。