Vor ein paar Wochen habe ich eine Frage gestellt How to override resources depending on buildType. Und gerade gestern gab es eine gradle plugin release for android. Basierend auf this post on G+ habe ich mich entschieden, diese Frage zu schreiben.resValue gradle error: Nicht unterstützter Typ "String" in "generated.xml"
Das Problem, das ich im Detail beschrieben haben:
Ich möchte je nach buildType
einige Ressourcenwerte schaffen, aber diese nicht richtig funktioniert: Die Datei „generated.xml“ nur erstellt werden wenn ich einen kompletten Build über die Befehlszeile:
gradlew build
Aber ich auch durch den Bau der kompletten Projekt über comannd Linie einen Fehler:
* What went wrong: Execution failed for task ':app:merge<buildVariant>Resources'.
Unsupported type 'String' in file C:\Users\...\build\res\generated\release\values\generated.xml
Jede andere Build-Testversion erstellt diese Datei nicht. Ich habe versucht, folgende:
- über IDE:
- Wiederaufbau Projekt
- externe Aufgabe "assembleBuildVariant" execute
- über Kommandozeile:
- gradlew assembleBuildVariant
Seltsam gradle Konsolenausgabe:
:app:generateBuildVariantResValues UP-TO-DATE
Mein build.gradle:
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "String", "RES FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "String", "RES FOO", "RES FOO RELEASE"
}
}
Mein "generated.xml":
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>
Meine Frage:
Ist das ein Bug oder habe ich etwas verpasst? Und warum wird diese Datei nicht von einem Rebuild
über die IDE erstellt?
Mein Build.gradle (UPDATE 2014.02.10 basierend auf rciovatis Antwort):
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
resValue "string", "RES_FOO", "RES FOO"
}
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "string", "RES_FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
}
UPDATE 2014.02.14 ES FUNKTIONIERT:
Nach an update of the gradle android plugin alles funktioniert:
In/build/res/all/Sie sollten sehen, folgende Ordner:
- alle
- erzeugt (-> hier gibt es die generierten Ressourcenwerte von
resValue
finden)
Der erste Ordner all
enthält alle zusammen Ressourcen. In Richtung all/<buildVariant>/values/values.xml
sollten Sie die generierten Ressourcen, in meinem Fall finden:
// for buildType DEBUG
<item name="TESTFOO" type="string">TEST FOO DEBUG</item>
// for buildType RELEASE
<item name="TESTFOO" type="string">TEST FOO RELEASE</item>
Um die Werte im Code zu erhalten nur die generierte Ressource wie alle anderen verwenden:
getResources().getString(R.string.TESTFOO)
Warum benötigen Sie ** buildConfigField **? Wo rufst du es in deinem Code an? –