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?
Vous devez vous connecter pour publier un commentaire.
J'ai résolu en ajoutant les ressources aussi dans le
defaultConfig
bloc. Pour vous, il serait quelque chose comme:Veuillez noter que:
string
et pasString
EDIT:
Depuis 0.8.3 il devrait fonctionner déclarant simplement le resValue dans la construction de type bloc.
getResources().getString(R.string.RES_FOO)
). Aussi le fichier "generated.xml" n'est pas créé par une génération sur l'IDE. Dans le gradle de la console, je peux voir la tâche pourresValue
, mais c'est toujours UP-to-DATE (:app:générer des<buildVariant>ResValues À JOUR). Avez-vous accès à l'généré res valeurs de code?