Gradle - создать sass per productflavor (несколько папок)

Мы создали приложение Android с веб-просмотром, в котором показан локальный веб-сайт из папки с ресурсами.

Проект имеет разные Product Flavors для создания различных приложений с разными стилями и контентом, но с теми же кодами (родной Java и HTML/JS).

Для каждого аромата мы хотим определить diffs sass файл с цветами и настройками для этого конкретного вкуса.

Я знаю, что мне нужно создать задачу в gradle, которая строит файлы CSS, но я понятия не имею, с чего начать:

  • Как получить URL-адрес папки с ресурсами определенного вкуса?
  • Можно ли использовать специальный плагин gradle для создания sass или мне нужно создать задачу, которая выполняет команду "sass"?
  • Когда я использую другой плагин типа gradle как компас, как мне настроить правильные папки для каждого аромата? Настройки плагина находятся на верхнем уровне, а не на уровне плагина Android.

Ответ 1

У меня есть решение!

Добавьте это в свой build.gradle в основной папке (а не в вашем приложении):

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven { url 'http://dl.bintray.com/robfletcher/gradle-plugins' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.github.robfletcher:compass-gradle-plugin:2.0.6'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Добавьте это build.gradle модуля приложения:

apply plugin: 'com.android.application'
apply plugin: 'com.github.robfletcher.compass'

android {

[..]

    android.applicationVariants.all { variant ->
        for (output in variant.outputs) {
            def assetsDir = output.packageApplication.assets;
            tasks["merge${variant.name.capitalize()}Assets"].doLast() {
                println "Assets folder: " + assetsDir

                def _ccsDir = file("$assetsDir/css")
                def _sassDir = file("$assetsDir/sass")
                def _imagesDir = file("$assetsDir/images")
                def _javascriptsDir = file("$assetsDir/js")
                def _fontsDir = file("$assetsDir/fonts")

                project.compass {
                    cssDir = _ccsDir
                    sassDir = _sassDir
                    imagesDir = _imagesDir
                    javascriptsDir = _javascriptsDir
                    fontsDir = _fontsDir
                }
                //compileSass
                project.compassCompile.execute()
            }
        }
    }
}

Я никогда не думал, что это сработает, но оно работает!