android - error de gradle resValue: Tipo no soportado "String" en "generated.xml"
android-studio android-gradle (1)
defaultConfig
agregar los recursos también en el bloque defaultConfig
. Para ti sería algo así como:
android {
defaultConfig {
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
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"
}
}
}
Tenga en cuenta que:
- el tipo de elemento debe ser una
string
y no unaString
- el nombre del elemento no debe contener espacios (como nombre normal del recurso)
EDITAR: desde 0.8.3 debería funcionar bien simplemente declarando el valor de res en el bloque de tipo de compilación.
Hace unas semanas publiqué una pregunta Cómo anular recursos dependiendo de buildType . Y ayer mismo hubo un lanzamiento de plugin de gradle para Android . Basado en esta publicación en G + I, decidí escribir esta pregunta.
El problema que he descrito en detalle:
Quiero crear algunos valores de recursos dependiendo de buildType
, pero esto no funciona correctamente: el archivo "generated.xml" solo se creará si realizo una compilación completa a través de la línea de comandos:
gradlew build
Pero también obtengo un error al compilar el proyecto completo sobre la línea del comando:
* 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
Cada otra versión de prueba no crea este archivo. Intenté seguir:
- sobre IDE:
- reconstruir proyecto
- ejecutar la tarea externa "assembleBuildVariant"
- sobre la línea de comando:
- gradlew assembleBuildVariant
Extraña salida de consola de gradle:
:app:generateBuildVariantResValues UP-TO-DATE
Mi 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"
}
}
Mi "generado.xml":
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>
Mi pregunta:
¿Es esto un error o me perdí algo? ¿Y por qué este archivo no es creado por Rebuild
over the IDE?
Mi build.gradle (UPDATE 2014-02-10 basado en la respuesta de rciovatis):
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"
}
}
ACTUALIZACIÓN 14/02/2014 FUNCIONA:
Después de una actualización del plugin de Android, todo funciona bien:
En / build / res / all / debería ver las siguientes carpetas:
- todas
- generado (-> aquí puede encontrar los valores de recursos generados por
resValue
)
La primera carpeta contiene todos los recursos fusionados. En la dirección all/<buildVariant>/values/values.xml
, debe encontrar los recursos generados, en mi caso:
// for buildType DEBUG
<item name="TESTFOO" type="string">TEST FOO DEBUG</item>
// for buildType RELEASE
<item name="TESTFOO" type="string">TEST FOO RELEASE</item>
Para obtener los valores en código simplemente use el recurso generado como todos los demás:
getResources().getString(R.string.TESTFOO)