2016-07-22 11 views
1

Ich habe ein Projekt mit vielen Geschmacksrichtungen, für jede Geschmacksrichtung habe ich eine Konfigurationsdatei, die angibt, welche Assets enthalten sein sollen.Gradle: Asset-Ordner dynamisch hinzufügen

hier ist das, was ich bisher:

applicationVariants.all { variant -> 
    variant.outputs.each { output -> 
     def config = getFlavourConfig(variant.getFlavorName()); 
     if(config!=null) { 
      if(config.get("font-assets") != null) { 
       config.get("font-assets").each { 
        println it 
/*this is not working ->*/ variant.assets.srcDirs += ['src/extensions/assets/'+it] 
       } 
      } 
     } 
    } 
} 

getFlavourConfig analysiert eine Gson Konfigurationsdatei. Die json hat [ "font-Assets": [ "fontfolder1", "fontfolder2"]

In dieser Zeile

variant.assets.srcDirs += ['src/extensions/assets/'+it] 

ich das Vermögen dir, um den Geschmack hinzufügen möchten. Irgendwelche Ideen?

Antwort

2

Sie könnten die Arbeit überdenken. Erstellen Sie einfach die productFlavor und definieren Sie dann die assets.srcDirs des Geschmacks. Jetzt können wir uns zurücklehnen und Androids Gradle-Plugin die ganze Arbeit machen lassen.

android { 
    //... 
    productFlavors { 
     blah {} 
     more {} 
    } 
    sourceSets { 
     blah { 
      assets.srcDirs = files(getFlavorConfig(it.name)) 
     } 
     more { 
      assets.srcDirs = files(getFlavorConfig(it.name)) 
     } 
    } 
} 

// simplified method for example 
def getFlavorConfig(String str) { 
    return ["$projectDir.absolutePath/src/extensions/assets/first", "$projectDir.absolutePath/src/extensions/assets/second"]; 
} 

Nach dem Build unsere Dateien, wo wir erwarten:

$ ls app/build/intermediates/assets/blah/debug/ 
hello.txt world.txt 

$ ls app/build/intermediates/assets/more/debug/ 
hello.txt world.txt 

$ ls app/build/intermediates/assets/blah/release/ 
hello.txt world.txt 

$ ls app/build/intermediates/assets/more/release/ 
hello.txt world.txt 
+0

Dank für die Antwort danken. Das Problem besteht darin, dass der Flavor von einem serverseitigen Skript generiert wird (durch Ändern der build.gradle-Datei). Um zu tun, was Sie vorgeschlagen haben, müsste ich das Skript bearbeiten, was ich nicht tun möchte. –