Android Studio Gradle:如何在自定义资产处理器任务中获取变体/风味

时间:2018-10-14 19:31:19

标签: android-studio gradle android-productflavors

我在Android Studio 3.1.3中具有简单的资产处理gradle任务prepare_assets。它链接到preBuild任务:

ObjectEqualityComparer<T>

现在,对于不同分辨率的版本,我有几种风格,我想让prepare_assets知道要处理的资产。也许我不了解Gradle的想法,但我不明白如何实现这一点:我试图在配置阶段设置变量

preBuild.dependsOn(prepare_assets)

但是当我在任务中读取变量时,它总是相同的。

1 个答案:

答案 0 :(得分:0)

在口味部分声明中:

all { flavor ->
    task("${flavor.name.capitalize()}_prepare_assets") {
        println "*** conf TEST for ${flavor.name.capitalize()}***"

        doLast {
            println "*** action TEST ${flavor.name.capitalize()}***"
            if (flavor.name.equals("fullhd"))
            {
              //WARNING: to call copy, javaexec closures here use project.copy and project.javaexec!
            }
            else
            {
            ...
            }
        }
    }
}

在文件底部,为运行时创建的所有类型的android任务添加依赖项:

tasks.whenTaskAdded { theTask ->
        if (theTask.class.name.contains("AppPreBuildTask_Decorated"))
        {
            for (Iterator iterator = android.productFlavors.iterator(); iterator.hasNext();) {
                String flv_name =  iterator.next().name.capitalize();
                if (theTask.name.contains(flv_name+"Debug") || theTask.name.contains(flv_name+"Release"))
                    theTask.dependsOn "${flv_name}_prepare_assets";
            }
    }
}