如何从Android Gradle文件获取当前构建变体

5
我有一个情景,在这个情景中,根据构建变体我必须运行一个任务。应用程序使用了productFlavour,所以它会为两种产品口味生成调试和发布版本。
我想要的是将当前所选产品口味的构建类型存储在gradle自身的一个变量中。
我尝试了下面的代码。
task getflavour(){
android.applicationVariants.all {         com.android.build.gradle.api.ApplicationVariant variant ->
   println "values of variant ${variant.productFlavors[0].name}"
    println "assemble ${variant.flavorName}"

}

但它会给出所有的构建变体,即2个调试版本和2个发布版本名称。我只想要当前选择的构建变体。
我非常感谢任何输入。提前致谢。

2
在 Gradle 脚本运行时,不存在“当前选择的构建变体”。Gradle 脚本构建一组描述构建过程的模型对象,在此时,所有构建变体都是可能的。 - CommonsWare
嗨@CommonsWare,我明白你的意思,模型对象描述了构建过程。那么除了从Studio本身查看之外,我们是否有其他方法可以获取当前的构建变体?感谢您回复该线程。 - Shahnawaz Jafri
1
使用applicationVariants.all时的典型方法是定义自定义的特定于变体的任务。这些任务知道它们所绑定的构建变量。请参阅 https://github.com/commonsguy/cwac-netsecurity/blob/v0.0.1/netsecurity/build.gradle#L34-L47 - CommonsWare
2个回答

2
您可以在变体循环中使用:gradle.startParameter.taskNames [0]

4
如果您正在构建所有项目(gradle assemble命令),那么这并不起作用。 - Vladyslav Matviienko

0

在Gradle中:

ext.vMajor = 1
ext.vMinor = 9

def computeVersionName() {
    return String.format('%d.%d', vMajor, vMinor)
}

在你的代码中:

    PackageInfo pInfo = null;

    try {

        pInfo = YamsaferApplication.getContext().getPackageManager().getPackageInfo(YamsaferApplication.getContext().getPackageName(), 0);

        return pInfo.versionName;

    } catch (PackageManager.NameNotFoundException e) {

        Log.e("getAppVersion", "Error getting App version", e);

    }

1
这里是从Java文件中获取包信息,但有没有办法直接从Gradle中获取构建变体呢? - Karanbeer Kaur

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