resValue gradle erreur: non prise en charge de type “String” dans “generated.xml”

Il y A quelques semaines, j'ai posté une question Comment remplacer les ressources en fonction de buildType.
Et hier il y avait un gradle plugin version pour android.
Basé sur ce post sur G+ j'ai décidé d'écrire cette question.

Le problème que j'ai décrit en détail:

Je veux créer des valeurs de la ressource en fonction de la buildType, mais cela ne fonctionne pas correctement:
Le fichier "generated.xml" va être créé si je fais un build complet sur la ligne de commande:

gradlew build

Mais j'obtiens un message d'erreur par la construction de l'ensemble du projet au cours comannd ligne:

* 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

Tous les autres procès n'est pas de créer ce fichier. J'ai essayé de suivre:

  • IDE:
    • projet de reconstruction de
    • effectuer des tâches "assembleBuildVariant"
  • sur la ligne de commande:
    • gradlew assembleBuildVariant

Étrange gradle sortie de la console:

:app:generateBuildVariantResValues UP-TO-DATE

Mon 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"
    }
}

Mon "generated.xml":

<!-- Automatically generated file. DO NOT MODIFY -->

<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>

Ma question:

Est-ce un bug ou ai-je raté quelque chose? Et pourquoi ce fichier n'est pas créé par un Rebuild par rapport à l'IDE?

Mon build.gradle (mise à JOUR 2014-02-10 basé sur rciovatis réponse):

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"
    }
}

MISE À JOUR 2014-02-14 CELA FONCTIONNE:

Après une mise à jour de la gradle android plugin tout fonctionne bien:

Dans /build/res/tous/vous devriez voir les dossiers suivants:

  • tous
  • généré (-> ici vous trouverez la ressource généré valeurs par resValue)

Le premier dossier all contient toutes fusionnées ressources. Dans le sens all/<buildVariant>/values/values.xml vous devriez trouver les ressources générées, dans mon cas:

//for buildType DEBUG
<item name="TESTFOO" type="string">TEST FOO DEBUG</item>
//for buildType RELEASE
<item name="TESTFOO" type="string">TEST FOO RELEASE</item>

Pour obtenir les valeurs dans le code suffit d'utiliser la ressource généré comme tous les autres:

getResources().getString(R.string.TESTFOO)
  • Pourquoi avez-vous besoin de buildConfigField? Où en êtes-vous de l'appeler dans votre code?
InformationsquelleAutor owe | 2014-02-06