自动增量VersionCode Gradle任务未按预期执行

时间:2016-06-25 17:41:16

标签: android gradle android-gradle

我想自动化android gradle版本化我的要求是

验证码版本名称

enter image description here

所以我在java应用程序中运行了代码

代码:

    public static void main(String[] args) {
    int fileVersionCode = 1;
    String fileVersionName;
    for (int i = 0; i < 200; i++) {
        if (fileVersionCode <= 10) {
            fileVersionName = "1." + (fileVersionCode - 1);
        } else if(fileVersionCode>=20 && fileVersionCode%10 ==0) {
            fileVersionName = ( (fileVersionCode / 10)) + ".9";
        }else {
            fileVersionName = (1 + (fileVersionCode / 10)) + "." +( (fileVersionCode % 10)-1);
        }
        System.out.println(fileVersionCode+"         "+fileVersionName);
        fileVersionCode++;
    }
}

我的代码按预期工作,但是在gradle中使用相同的代码

task firstTask {
doFirst {
    int fileVersionCode = 1;
    String fileVersionName;
    for (int i = 0; i < 200; i++) {
        if (fileVersionCode <= 10) {
            fileVersionName = "1." + (fileVersionCode - 1);
        } else if(fileVersionCode>=20 && fileVersionCode%10 ==0) {
            fileVersionName = ( (fileVersionCode / 10)) + ".9";
        }else {
            fileVersionName = (1 + (fileVersionCode / 10)) + "." +( (fileVersionCode % 10)-1);
        }
        System.out.println(fileVersionCode+"         "+fileVersionName);
        fileVersionCode++;
    }
}
doLast{
//        println 'firstTask doLast'
}
}

运行:&gt; gradlew firstTask

输出不同我为什么会这样 enter image description here

1 个答案:

答案 0 :(得分:3)

在groovy中,如果操作数的类型为BigDecimal,则除法会产生Integer,而在Java中,它们的类型为int

fileVersionCode11时,结果为:

(fileVersionCode / 10) 

转换为Java中的1,但转换为Groovy中的1.1。为了解决这个问题,只需添加一个(int)强制转换来修剪不必要的小数部分。