android android-studio android-gradle build.gradle

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 una String
  • 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)