2015-10-22 7 views
11

Wir haben eine Android App mit einem Webview erstellt, der eine lokale Website aus dem Ordner Assets zeigt.Gradle - build sass pro productflavor (multi Ordner)

Das Projekt verfügt über verschiedene Produkt-Flavors, um verschiedene Apps mit verschiedenen Stilen und Inhalten, aber mit denselben Codebases (natives Java und HTML/JS) zu generieren.

Für jeden Geschmack möchten wir eine unterschiedliche Sass-Datei mit den Farben und Optimierungen für diesen spezifischen Geschmack definieren.

Ich weiß, dass ich eine Aufgabe in gradle erstellen müssen, die die CSS-Dateien erstellt, aber ich habe keine Ahnung, wo ich anfangen soll:

  • Wie erhalte ich die URL der Vermögenswerte Ordner eines bestimmten Geschmack?
  • Kann ich ein spezielles Gradle-Plugin zum Erstellen von Sass verwenden oder muss ich eine Aufgabe erstellen, die den Befehl "sass" ausführt?
  • Wenn ich ein anderes Gradle-Plugin wie Kompass verwende, wie konfiguriere ich die richtigen Ordner für jeden Geschmack? Die Plugin-Einstellungen sind auf der obersten Ebene und nicht auf der Ebene des Android-Plugins.

Antwort

4

Ich habe endlich die Lösung!

Fügen Sie diese auf Ihren build.gradle im Hauptordner (nicht Ihre App):

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() 
    } 
} 

Fügen Sie diese den build.gradle der App-Modul:

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() 
      } 
     } 
    } 
} 

Ich habe nie gedacht, es würde funktionieren, aber es funktioniert!

+2

Prost .Move ahead –

+1

Eine große Anmerkung: Wenn Sie "Signed APK .. Generate" verwenden, funktioniert diese Build-Task aus irgendeinem Grund nicht. Wenn ich sie mit dem Run-Button in einer Release-Variante mit signingConfigs erstelle: Das APK in 'build \ outputs \ apk' ist in Ordnung. – Roel