2015-08-31 57 views
0

如何识别正在编译的当前错误。我试图添加一个文件才能编译,只有当我编译某种产品风格。Android Gradle在编译时识别当前错误

buildTypes { 

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

问题是,我似乎无法找到我正在建设的味道currentFlavourName位于哪里。

+1

你想添加什么样的文件?我认为有一个更简单的方法.. – ligi

+0

我希望能够根据我正在编译什么类型的味道来控制我使用哪个strings.xml文件。其中type指的是特定的东西,可以是真或假,而不是调试或发布。 – JY2k

回答

0

只是把你想为flavor1到字符串:

src/flavor1/res/values/strings.xml 

和字符串flavor2到:

src/flavor2/res/values/strings.xml 

没有必要把逻辑到您的gradle这个文件

0

Android使用针对不同口味的资源提供独特的构建流程,并且非常易于控制。

,如果你设置你的主要来源:

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

这将是从产品的味道自下而上的方法到主。这意味着如果你的开发/ res /值中存在具有相同名称的项目的strings.xml,并且具有也存在于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" 
    } 
} 
-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\"" 
    } 
} 
+0

当我创建它时,我不想复制所需的字符串文件类型。我希望能够选择它并将其编译为该风格。有很多字符串,所以resValue会很不合适。 BuildConfig类似于resValue,既不能满足我的需求。 – JY2k

+0

@ JY2k在这种情况下,您必须遵循选项1。你必须使用不同的字符串。xml为每个flavor保留主文件夹中的常用字符串。 –

+0

我很欣赏这种努力,但我问了如何在编译时在build.gradle文件中识别当前的风格。 – JY2k