Gradle - 每个productflavor构建sass(多文件夹)

Roe*_*oel 11 android sass gradle

我们创建了一个带有webview的Android应用程序,该应用程序显示了assets文件夹中的本地网站.

该项目具有不同的产品风味,可生成具有不同样式和内容但具有相同代码库(本机Java和HTML/JS)的不同应用程序.

对于每种风味,我们想要定义一个不同的sass文件,其中包含特定风味的颜色和调整.

我知道我需要在gradle中创建一个构建CSS文件的任务,但我不知道从哪里开始:

  • 如何获取特定风味的assets文件夹的url?
  • 我可以使用特殊的gradle插件来构建sass,还是必须创建执行"sass"命令的任务?
  • 当我使用另一个像指南针这样的gradle插件时,如何为每种味道配置正确的文件夹?插件设置位于顶级,而不是Android插件级别.

Roe*_*oel 4

我终于有解决办法了!

将其添加到主文件夹(不是您的应用程序)的 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

将其添加到应用程序模块的 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()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我从没想过它会成功,但它确实有效!