Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android应用程序中获取产品风格或构建变体_Android_Gradle - Fatal编程技术网

在android应用程序中获取产品风格或构建变体

在android应用程序中获取产品风格或构建变体,android,gradle,Android,Gradle,我有一个android应用程序,在build.gradle文件中配置了许多不同的产品风格 productFlavors { someFlavor {} anotherFlavor {} } 在我的应用程序代码中,我希望能够掌握当前编译的风格(或构建变体)的名称。一个解决方案是: productFlavors { someFlavor { buildConfig "public static final String PRODUCT_FLAVOR = \"

我有一个android应用程序,在build.gradle文件中配置了许多不同的产品风格

productFlavors {
    someFlavor {}
    anotherFlavor {}
}
在我的应用程序代码中,我希望能够掌握当前编译的风格(或构建变体)的名称。一个解决方案是:

productFlavors {
    someFlavor {
        buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";"
    }
    anotherFlavor {
        buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";"
    }
}
然后在我的android应用程序中调用
BuildConfig.PRODUCT\u FLAVOR


有什么办法可以让gradle自动完成吗?或者安卓系统中是否有其他API可用于获取产品风味名称?

编辑:现在从插件的0.7版开始自动完成此操作<代码>BuildConfig.java将包含

public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "f1Fa";
public static final String FLAVOR_group1 = "f1";
public static final String FLAVOR_group2 = "fa";
FLAVOR
是应用了所有风味维度/组的组合风味名称。然后每个维度都可以作为
FLAVOR\uu
使用

最后,
BUILD\u TYPE
包含所用构建类型的名称

如果只有一个flavor维度,那么只有
flavor
常量

这是目前唯一的办法

你可以做的一件事就是让它自动化。所以你可以这样做:

android {
   productFlavors.whenObjectAdded { flavor ->
       flavor.buildConfig "public static final String PRODUCT_FLAVOR = \"${flavor.name}\";"
   }

   // your normal config here.
}

这样,您就不必为每种口味手动执行此操作。

公认的解决方案非常棒。但在某些情况下,备选方案可能有用

您可以向productFlavor特定的源文件夹添加一个配置文件,比如“Appconfig.java”,即
src//java//Appconfig.java
;然后,您可以在应用程序中使用
Appconfig.PRODUCT\u FLAVOR
。编译器会让你保持诚实,并确保你为所有口味添加这个


正如我所说,在这种特殊情况下,接受的解决方案可能更好,因为您甚至不需要为新的productFlavors添加任何内容,但这种方法可能对其他情况有用。

这正是我想要的-谢谢。我发现我需要使用whenObjectAdded而不是whenAdded,所以我编辑了您的答案,但基本上这是正确的。非常感谢您更新您的答案-非常有用!我想在build.gradle中获取所选的构建变量,但whenObjectAdded对我不起作用。以下是我正在做的:android{productFlavors{flavor1{}flavor2{}productFlavors.whenObjectAdded{flavor->println'当添加对象时:'+flavor}构建类型{调试{}发布{}}}我想从我的包中获得一个付费的apk。但是我的口味框是空的,知道吗?为什么这个答案的一半被划掉了,没有任何解释或更新的代码?