Переопределять ресурсы с помощью gradle в зависимости от buildType

Я хочу переопределить некоторые строки в моем res / strings.xml с помощью gradle.

я знаю этоначиная с Android Gradle Plugin 0.7. + есть возможность иметь конкретный вариант исходной папки. Но мое приложение имеет много вкусов, и я неНе хочу добавлять дополнительные варианты конкретных папок.

ОБНОВЛЕНИЕ 2014-01-17

Что я хочу подробно:

У меня есть некоторые переменные в моих ресурсах, которые зависят только от buildType (например, "релиз"). Сначала я думал, что мойSOLUTION_1 (переопределение данных после слияния ресурсов) - это хорошо, потому что, если мне нужно изменить эти переменные, мне просто нужно изменить их в build.config (только в одном месте). Но, как Скотт Барта написал в комментарии ниже, есть несколько веских причин, почему это решение НЕ является хорошей идеей.

Поэтому я попробовал другое решениеSOLUTION_2 (просто объединить нужные ресурсы) на основеэтот проект GitHub из Шакалака, Я думаю, что этот способ более элегантный, и у меня все еще есть преимущество, просто меняя переменные водин место!

SOLUTION_1 (переопределить данные после объединения ресурсов):

Что я сделал в AS 0.4.2:

вbuild.gradle Я пытаюсь переопределить строкуПривет, мир" к "ПЕРЕЗАГРУЗИТЬ "(основываясь на моем ответе на этот пост):

android.applicationVariants.all{ variant ->
    // override data in resource after merge task
    variant.processResources.doLast {
        overrideDataInResources(variant)
    }
}

def overrideDataInResources(buildVariant){
    copy {
        // *** SET COPY PATHS ***
        try {
            from("${buildDir}/res/all/${buildVariant.dirName}") {
                // println "... FROM: ${buildDir}/res/all/${buildVariant.dirName}"
                include "values/values.xml"
            }
        } catch (e) {
            println "... EXCEPTION: " + e
        }

        into("${buildDir}/res/all/${buildVariant.dirName}/values")
        // println "... INTO: ${buildDir}/res/all/${buildVariant.dirName}/values"

        // --- override string "hello_world"
        filter {
            String line ->
                line.replaceAll("Hello world!",
                        "OVERRIDE");
        }

    // *** SET PATH TO NEW RES *** 
    buildVariant.processResources.resDir = file("${buildDir}/res/all/${buildVariant.dirName}/values/values/values.xml")
    // println "... NEW RES PATH: " + "${buildDir}/res/all/${buildVariant.dirName}/values/values/values.xml"
    }
}

Задача копирования и фильтрации работает нормально, но я не смогустановить "новый» values.xml как строковый ресурс.

SOLUTION_2 (просто объедините нужные ресурсы)

определить floavor для определенного buildType (например, "releaseRes ")

объедините эти ресурсы со вкусом, который вы хотите создать:

android.applicationVariants.all{ variant ->
    variant.mergeResources.doFirst{
        checkResourceFolder(variant)
    }
}

def checkResourceFolder(variant){
    def name = variant.name;
    if(name.contains("Release")){
       android.sourceSets.release.res.srcDirs = ['src/releaseRes/res']
       android.sourceSets.flavor1.res.srcDirs = ['src/flavor1/res']
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос