2015-08-31 24 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