6

Ich bin daran interessiert, meine vielen Varianten meiner Apps mehr in den strings.xml-Dateien als in der build.gradle zu definieren. Gegeben mehrere Aromen, würde ich eine vereinfachte Release/debug Variante mag:Definition von 'resValue' mit einer vorhandenen String-Definition

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
     resValue "string", "app_name", "@string/prod_name" 
    } 
    debug { 
     applicationIdSuffix ".beta" 
     resValue "string", "app_name", "@string/beta_name" 
    } 

Dann in jedem meiner Build Aromen custom res/Werte/strings.xml Dateien, würde ich jede ihre eigene ‚prod_name‘ definieren und "Beta-Name" Ich möchte dieses ähnliche Framework auch für die Definition der Provider usw. nutzen ...

Diese wird derzeit über die Kommandozeile von gradle funktionieren, kann aber von Android Studio nicht erkannt werden.

Android Studio Fehler:

Das finde ich in 'generated.xml'

<!-- Values from build type: debug --> 
<string name="app_name">@string/beta_name</string> 

Welche typisch ist, wie eine Saite eine andere verweist. Aber diesmal Android Studio gibt mir diese Fehlermeldung:

Error:(7, 29) No resource found that matches the given name 
(at 'app_name' with value '@string/beta_name'). 

Ich bin mit Android Studio 2.1 Preview 5

+0

Könnten Sie es genauer zu wissen, was genau bedeutet „erkannt wird nicht von Android Studio“? –

+0

..w.hyy nicht nur die richtigen Zeichenfolgen in die richtigen Ressourcenverzeichnisse? 'src/release/res/values ​​/ strings.xml 'für release-spezifische Strings,' src/debug/res/values ​​/ strings.xml' für Debug-Builds? –

Antwort

4

Nach meiner Erfahrung kann man nicht ein @string/my_string im resValue DSL lösen. Gradle setzt den Wert als einfache Zeichenfolge in die Ressourcendatei.

In diesem Fall können Sie verschiedene Ordner verwenden, um es zu erreichen:

Verwenden Sie einfach:

src/release/res/values/strings.xml 
src/debug/res/values/strings.xml 

Wenn Sie verschiedene Ressourcen für jede Build-Variante verwenden möchten (Build Art + Geschmack) können Sie Verwenden Sie:

src/flavor1Release/res/values/strings.xml 
src/flavor1Debug/res/values/strings.xml 
src/flavor2Release/res/values/strings.xml 
src/flavor2Debug/res/values/strings.xml 
+0

Was passiert, wenn ich mich bereits mit mehreren Geschmacksrichtungen befasse? Ich habe mein reguläres "Res" -Verzeichnis, sowie meine Flavor-Verzeichnisse: "/ one/res /", "/ two/res" etc ... Ich wollte ursprünglich nur "prod_name" und "beta_name" definieren Das res-Unterverzeichnis jedes Flavors minimiert somit einen weiteren Faktor von 2 Multiplikationen von Verzeichnissen ... – FishStix

+0

In diesem Fall fügen Sie nur die Strings (die im Buildtyp unterschiedliche Werte haben) in diese Dateien ein. –

+0

Ich finde kein gutes Beispiel in der Dokumentation. Wie gehe ich bei der Definition der Debug- und Release-Verzeichnisse für jeden Geschmack vor? Ich habe bereits meine wichtigsten "res" sowie "one/res", "zwei/res", etc ... für alle Geschmacksrichtungen. – FishStix

2

Dies ist tatsächlich möglich. Alles, was Sie tun müssen, ist diese Zeichenfolge als leer in Ihrem DefaultConfig, wie dies zu erklären:

defaultConfig { 
    resValue "string", "prod_name", "" 
    resValue "string", "beta_name", "" 
} 
+0

Und dies wird nicht mit den Definitionen in den strings.xml Dateien jedes Flavors kollidieren? Die strings.xml-Datei des Flavors überschreibt die 'defaultConfig' von Gradle. – FishStix

+1

Das ist richtig. – steffandroid