为什么在Gradle脚本中未定义我的变量?

时间:2019-04-04 13:14:22

标签: android android-gradle android-flavors

我要做的是创建6个不同的变体,每个变体的AndroidManifest几乎没有变化。数据是动态计算的,因此我不能简单地手工将其放入variant/AndroidManifest.xml

当我为一个特定的变体运行构建脚本时,说“ TinyDebug”,它没有完成我想做的事情。在这种情况下,我希望它的版本代码为1501。

我在这里对脚本进行了大量编辑,以使其更具可读性。由于数据计算的复杂性,我宁愿将它们放在一个任务中(初始化任务所依赖的任务)。

问题:为什么AndroidManifest中的version_code计算不正确?我应该如何执行计算,以便可以将风味因素考虑在内,并将其输出传递给AndroidManifest.xml

build.gradle

def int version_code_suffix = -1    //-1 means it is erronous or unset

task initialize{    
    doFirst{
        android.productFlavors.tiny {
            version_code_suffix = 1
        }
    }
}

android {
    productFlavors {
        tiny {
            versionCode 1500 + version_code_suffix
        }
    }
    tasks.whenTaskAdded { task ->
        if (task.name == 'processTinyDebugResources') {
            task.dependsOn initialize
        }
    }
}

AndroidManifest.xml构建后(应该为1501)

android:versionCode = 1499

1 个答案:

答案 0 :(得分:0)

如果您将在如下所示的任何地方使用它,请尝试将其定义为项目变量。

project.ext.version_code_suffix = -1    //-1 means it is erronous or unset

task initialize{    
    doFirst{
        android.productFlavors.tiny {
            version_code_suffix = 1
        }
    }
}

android {
    productFlavors {
        tiny {
            versionCode 1500 + version_code_suffix
        }
    }
    tasks.whenTaskAdded { task ->
        if (task.name == 'processTinyDebugResources') {
            task.dependsOn initialize
        }
    }
}