2016-07-22 4 views
1

私は多くの味のプロジェクトを持っていますが、それぞれの味のためにどの資産を含めるかを指定する設定ファイルがあります。ここGradle:資産フォルダを動的に追加する

私がこれまで持っているものです。

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はgson設定ファイルを解析します。 [ "fontfolder1"、 "fontfolder2"]私は味にdirを資産を追加したい

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

このラインで

:JSONは[ "フォント-資産" を持っています。何か案は?

答えて

2

あなたは、必要な作業を過度に思っているかもしれません。 productFlavorを作成し、フレーバーのassets.srcDirsを定義するだけです。私たちは座ってAndroidのgradleプラグインにすべての作業をさせることができます。

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"]; 
} 

我々が期待する場所です。ファイルがなる構築した後:

$ 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

は答えをいただき、ありがとうございます。問題は、フレーバーが(build.gradleファイルを変更して)サーバーサイドスクリプトによって生成されることです。あなたが提案したようにするには、私がやりたくないスクリプトを編集する必要があります。 –