Gradle:动态添加资产文件夹

7

我有一个项目,其中包含许多不同版本,每个版本都有一个配置文件,用于指定要包括哪些资产。

以下是目前的情况:

    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个回答

4

您可能在过度思考所需的工作。只需创建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

谢谢你的回答。问题在于口味是由服务器端脚本生成的(通过修改build.gradle文件)。为了按照你的建议去做,我需要编辑脚本,但我不想这样做。 - Kamen Dobrev

3

我最终在构建时使用了一种版本,并使用了以下代码行:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接