Несколько недель назад я опубликовал вопрос Как переопределить ресурсы в зависимости от типа buildType. И только вчера появилась версия gradle для Android. На основе этот пост в G + Я решил написать этот вопрос.
Проблема, которую я подробно описал:
Я хочу создать некоторые значения ресурсов в зависимости от buildType
, но это не работает должным образом:
Файл "сгенерированный .xml" будет создан только в том случае, если я сделаю полную сборку по командной строке:
gradlew build
Но я также получаю сообщение об ошибке, создав полный проект по линии comannd:
* 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
Все остальные сборки не создают этот файл. Я пробовал следующее:
- над IDE:
- перестроить проект
- выполнить внешнюю задачу "assembleBuildVariant"
- над командной строкой:
- gradlew assembleBuildVariant
Странный gradle вывод консоли:
:app:generateBuildVariantResValues UP-TO-DATE
My 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"
}
}
Мой "сгенерированный .xml":
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>
Мой вопрос:
Является ли это ошибкой или я что-то пропустил? И почему этот файл не создан Rebuild
над IDE?
My build.gradle(UPDATE 2014-02-10 на основе ответа 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"
}
}
ОБНОВЛЕНИЕ 2014-02-14 ЭТО РАБОТАЕТ:
После обновление плагина gradle android все работает отлично:
В/build/res/all/вы должны увидеть следующие папки:
- все
- сгенерированный (- > здесь вы найдете сгенерированные значения ресурсов
resValue
)
Первая папка all
содержит все объединенные ресурсы. В направлении all/<buildVariant>/values/values.xml
вы должны найти сгенерированные ресурсы, в моем случае:
// for buildType DEBUG
<item name="TESTFOO" type="string">TEST FOO DEBUG</item>
// for buildType RELEASE
<item name="TESTFOO" type="string">TEST FOO RELEASE</item>
Чтобы получить значения в коде, просто используйте сгенерированный ресурс, как и все остальные:
getResources().getString(R.string.TESTFOO)