Gradle:动态添加资源文件夹

时间:2016-07-22 15:13:32

标签: android android-gradle build.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配置文件。 json有[" font-assets":[" fontfolder1"," fontfolder2"]

在这一行

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

我想将资源目录添加到风格中。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我最终在构建时只使用一种口味,并使用了以下代码:

android.sourceSets.main.assets.srcDirs += ['src/extensions/assets/'+it]

答案 1 :(得分: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