Android Gradle在编译时识别当前falvor

Android Gradle在编译时识别当前falvor,android,gradle,android-gradle-plugin,build.gradle,Android,Gradle,Android Gradle Plugin,Build.gradle,如何识别正在编译的当前风格。我试图添加一个要编译的文件,仅当我正在编译某种产品风格时 buildTypes { android.applicationVariants.all { variant -> variant.productFlavors.each() { flavor -> if (flavor.name.equals(currentFlavorName)) { 问题是,我似乎找不到当前正在构建的香精的CurrentF

如何识别正在编译的当前风格。我试图添加一个要编译的文件,仅当我正在编译某种产品风格时

buildTypes {

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

问题是,我似乎找不到当前正在构建的香精的CurrentFlavorName位于何处。

只需将您想要用于flavor1的字符串放入:

src/flavor1/res/values/strings.xml 
将flavor2的字符串转换为:

src/flavor2/res/values/strings.xml 

无需将逻辑放入gradle文件

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"
    }
}

我不知道是否存在获取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\""
    }
 }

您要添加什么类型的文件?我认为有一种更简单的方法..我希望能够根据编译的风格控制使用哪个strings.xml文件。其中type指的是一些特定的东西,可以是true,也可以是false,而不是debug或release。我不想在创建所需类型的字符串文件时复制它。我希望能够选择它,并将其编译为那种风格。有很多字符串,因此resValue将非常不适合。BuildConfig类似于resValue,既不为我的pupose服务。@JY2k在这种情况下,您必须遵循选项1。您必须为每个版本使用不同的strings.xml,将公共字符串保留在主文件夹中。我很感谢您的努力,但我询问了如何在编译时在build.gradle文件中识别当前版本。@JY2k抱歉。我一直在关注你的评论,我希望能够控制哪个strings.xml文件,我认为我的答案可以是实现它的一种方式,而不是识别当前的味道。老实说,我上个月没找到它。无论如何,我已经更新了答案。