我有一个Android应用程序,在我的build.gradle文件中配置了许多不同的产品风格,例如
productFlavors {
someFlavor {}
anotherFlavor {}
}
在我的应用程序代码中,我希望能够掌握当前编译的flavor(或构建变体)的名称。一个解决方案就是:
productFlavors {
someFlavor {
buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";"
}
anotherFlavor {
buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";"
}
}
然后在我的Android应用程序中调用BuildConfig.PRODUCT_FLAVOR
。
有什么方法可以让我自动做到这一点吗?或者在android中我可以使用其他API获取产品风味名称吗?
答案 0 :(得分:58)
编辑:现在从插件版本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
包含使用的构建类型的名称。
如果您有一个风味维度,那么您只有FLAVOR
常量。
这是目前唯一的方法。
你可以做的一件事是自动化它。所以你可以这样做:
android {
productFlavors.whenObjectAdded { flavor ->
flavor.buildConfig "public static final String PRODUCT_FLAVOR = \"${flavor.name}\";"
}
// your normal config here.
}
这样您就不必为每种口味手动执行此操作。
答案 1 :(得分:6)
公认的解决方案非常棒。对于某些情况,替代方案可能有用。
您可以添加配置文件,将'Appconfig.java'添加到productFlavor特定的源文件夹,即src/<productflavor>/java/<packagename>/Appconfig.java
;然后,您可以在应用中使用Appconfig.PRODUCT_FLAVOR
。编译器会保持诚实,并确保为所有风格添加此功能。
就像我说的那样,在这种特殊情况下,接受的解决方案可能更好,因为你甚至不需要为新的productFlavors添加任何东西,但这种方法可能对其他情况有用。