2014-09-23 5 views
20

Ich habe ein Produkt mit mehreren Produkten Aromen wie:Gibt es eine Möglichkeit, einen gemeinsamen Abschnitt mit buildConfigField und resValue in Gradle zu haben?

buildTypes { 
    debug { 
    } 

    release { 
    } 

} 

productFlavors { 
    flavor1 { 
     buildConfigField "String" "country" "se" 
     buildConfigField "String" "language" "sv-SE" 
     buildConfigField "String" "appName" "Flavor1" 
    } 
    flavor2 { 
     buildConfigField "String" "country" "se" 
     buildConfigField "String" "language" "sv-SE" 
     buildConfigField "String" "appName" "Flavor2" 
    } 
    flavor3 { 
     buildConfigField "String" "country" "se" 
     buildConfigField "String" "language" "sv-SE" 
     buildConfigField "String" "appName" "Flavor3" 
    } 
    flavor4 { 
     buildConfigField "String" "country" "se" 
     buildConfigField "String" "language" "sv-SE" 
     buildConfigField "String" "appName" "Flavor4" 
    } 
    flavor5 { 
     buildConfigField "String" "country" "se" 
     buildConfigField "String" "language" "no-NO" 
     buildConfigField "String" "appName" "Flavor5" 
    } 
} 

Ich würde einen gemeinsamen Abschnitt mit allen Eigenschaften bevorzugen und nur diejenigen außer Kraft setzen, die anders sind. Ist das möglich?

Ich möchte auch alle Aromen (und vielleicht buildTypes) in eine eigene Datei, um es lesbarer zu machen. Wann immer Sie einen Flavor ändern müssen, können Sie ihn leicht in seiner eigenen Datei finden und müssen nicht über Tausende von Zeilen scrollen, wenn alle Flavors und BuildTypes zusammen mit dem Rest in der Haupt-Build-Datei enthalten sind.

+4

'defaultConfig' – Selvin

+0

Ich dachte darüber nach, dass aber es scheint chaotisch resValues ​​und buildConfigFields zu diesem Abschnitt hinzuzufügen. Aber vielleicht ist es der einzige Weg. Was ist mit dem Verschieben in eine separate Datei? – peuhse

+0

'debug' und' release' von 'buildTypes' sollten den Trick auch machen, aber du musst Werte auf beide setzen ... trotzdem, warum ist es chaotisch? Standardkonfiguration enthält Standardwerte ... über mehrere Dateien ... ich arbeite nie mit em – Selvin

Antwort

43

Selvin ist richtig, verwenden Sie den defaultConfig Verschluss - gibt es keinen besseren Weg! Im folgenden Beispiel würden die Varianten 1, 2 & 5 das Standardland und die Standardsprache auf de setzen. Flavours 3 & 4 überschreiben dies mit ihren eigenen Sprachen.

defaultConfig { 
    buildConfigField "String", "country", "de" 
    buildConfigField "String", "language", "de" 
} 

buildTypes { 
    debug { 
    } 

    release { 
    } 
} 

productFlavors { 
    flavor1 { 
     buildConfigField "String", "appName", "Flavor1" 
    } 
    flavor2 { 
     buildConfigField "String", "appName", "Flavor2" 
    } 
    flavor3 { 
     buildConfigField "String", "country", "uk" 
     buildConfigField "String", "language", "en_GB" 
     buildConfigField "String", "appName", "Flavor3" 
    } 
    flavor4 { 
     buildConfigField "String", "country", "fr" 
     buildConfigField "String", "language", "fr" 
     buildConfigField "String", "appName", "Flavor4" 
    } 
    flavor5 { 
     buildConfigField "String", "appName", name.capitalize() 
    } 
} 

HINWEIS

eine Gerade FYI, dass Sie name.capitalize() können den Namen eines beliebigen Geschmack drehen, z.B. flavor5, in den App-Namen von Flavor5 mit der capitalize() Methode - die das erste Zeichen in der Zeichenfolge groß geschrieben wird. Allerdings muss dies im Geschmack gehen, nicht defaultConfig

Verwandte Themen