Android Gradle在编译时识别当前的falvor

时间:2015-08-31 12:14:24

标签: android gradle android-gradle build.gradle

如何识别正在编译的当前风味。我只是在编译某种产品风味时尝试添加文件进行编译。

buildTypes {

     android.applicationVariants.all { variant ->
         variant.productFlavors.each() { flavor ->
            if (flavor.name.equals(currentFlavorName)) {

问题在于,我似乎无法找到我当前正在构建的味道的currentFlavourName所在的位置。

3 个答案:

答案 0 :(得分:0)

将flavor1所需的字符串放入:

src/flavor1/res/values/strings.xml 

和flavor2的字符串:

src/flavor2/res/values/strings.xml 

无需将逻辑放入您的gradle文件

答案 1 :(得分:0)

Android使用针对不同风格的资源的独特构建过程,并且非常容易控制。

如果您设置主要来源:

project-name
------------/app
---------------/src
-------------------/main
------------------------/res
----------------------------/values
------------------------/java
-------------------/development
-------------------------------/res
-----------------------------------/values
-------------------------------/java
-------------------/production
------------------------------/res
----------------------------------/values
------------------------------/java

这将是从产品风味到主要风格的自下而上的方法。这意味着如果你有一个strings.xml,其中包含在development / res / values中存在同名的项,并且main / res / values / strings.xml中也存在这些值,那么这些将被覆盖(同样适用于生产味道)基于gradle文件中定义的构建变体。

android {
  productFlavors {
    production {
        applicationId "com.test.prod"
        versionName "1.0.0"
    }
    development {
        applicationId "com.test.dev"
        versionName "1.0.0"
    }
}

答案 2 :(得分:-1)

我不知道是否退出获取currentFlavor的方法。我还没找到。

丑陋的解决方案可以

variant.productFlavors.each() { flavor ->
       if (flavor.name.equals("flavor1")) {
           //..........
       }
}

但是,如果您希望能够控制正在使用的strings.xml,则可以通过不同方式实现它。

首先,您可以在flavor文件夹中定义一个xml文件。

app/src/main/res/values/    -> for common resources
app/src/flavor1/res/values  -> resources for flavor1
app/src/flavor2/res/values  -> resources for flavor2

这不需要build.gradle脚本中的任何配置。

第二种选择是使用build.gradle定义资源值。 类似的东西:

productFlavors {
    flavor1 {
        resValue "string", "app_name", "IRCEnterprise"
    }
    //....
}

另一种选择是使用这种脚本在BuildConfig类中创建一些字段。

productFlavors {
    flavor1 {
        buildConfigField "String", "name", "\"MY FLAVOR NAME\""
    }
 }