44

我有一个 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_FLAVOR中。

有什么方法可以让 gradle 自动执行此操作吗?或者我可以使用 android 中的其他 API 来获取产品风味名称?

4

2 回答 2

70

编辑:现在从插件的 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.
}

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

于 2013-08-01T17:19:38.547 回答
7

公认的解决方案很棒。在某些情况下,替代方案可能有用。

您可以添加一个配置文件,例如“Appconfig.java”到您的 productFlavor 特定源文件夹,即src/<productflavor>/java/<packagename>/Appconfig.java;然后你可以Appconfig.PRODUCT_FLAVOR在你的应用程序中使用。编译器会让你诚实,并确保你为所有口味添加这个。

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

于 2013-10-05T05:42:00.117 回答