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

我有一个Android应用程序,在我的build.gradle文件中configuration了许多不同的产品口味

productFlavors { someFlavor {} anotherFlavor {} } 

在我的应用程序代码中,我希望能够获得当前编译的风格(或构build变体)的名称。 一个解决scheme是:

 productFlavors { someFlavor { buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";" } anotherFlavor { buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";" } } 

然后在我的Android应用程序调用BuildConfig.PRODUCT_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_<group name>

最后, BUILD_TYPE包含使用的构buildtypes的名称。

如果你有一个味道维度,那么你只有FLAVOR常量。

这是现在唯一的方法。

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

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

这样你就不必手动为每种口味做。

接受的解决scheme是真棒。 对于某些情况,备用可能是有用的。

你可以添加一个configuration文件,说'Appconfig.java'到你的productFlavor特定的源文件夹,例如src/<productflavor>/java/<packagename>/Appconfig.java ; 您可以在应用程序中使用Appconfig.PRODUCT_FLAVOR 。 编译器会保持你的诚实,并确保你添加这个所有的味道。

就像我说的,在这个特殊情况下,接受的解决scheme可能会更好,因为您甚至不需要为新产品Flavors添加任何东西,但是这种方法可能对其他情况有用。