android - 在 Android gradle 构建开始时根据风格复制文件

标签 android gradle android-gradle-plugin

我在 Android 应用程序的 gradle 文件中有两种风格:

productFlavors {
    production { }
    devel { }
}

我有一个配置文件,在构建项目时,我需要在运行任何其他任务之前将其复制到 app/ 目录。这是每个口味的配置文件,即:

etc/configuration-production.json
etc/configuration-devel.json

在构建 devel 时,我基本上需要这样做:

cp etc/configuration-devel.json app/configuration.json

构建产品时:

cp etc/configuration-production.json app/configuration.json

我如何在 gradle 中自动执行此操作?此副本需要在执行构建时首先发生,因为某些任务需要 app/configuration.json 文件存在。

我试过:

task copyConfig(type: Copy) {
     from "etc/configuration-${Flavor.name}.json"
     into "app/configuration.json"
} 

build.dependsOn copyConfig

但是没有用。 copyConfig 任务未运行。

最佳答案

您可以将以下内容添加到您的 app build.gradle 以将您的文件从 etc/configuration-XXX.json 复制到 app/configuration.json 在各自任务的第一个语句中 assembleDevel.* & assembleProduction.* :

def cp(copyType) {
    println "copying " + "../etc/configuration-" + copyType + ".json"
    copy {
        from "../etc/configuration-" + copyType + ".json"
        into '.'
        rename { String fileName ->
            fileName.replace("configuration-" + copyType + ".json", "configuration.json")
        }
    }
}

tasks.whenTaskAdded { task ->
    if (task.name ==~ /assembleDevel.*/) {
        task.doFirst() {
            cp("devel")
        }
    } else if (task.name ==~ /assembleProduction.*/) {
        task.doFirst() {
            cp("production")
        }
    }
}

这是必需的配置:

app/
├── build.gradle
etc/
├── configuration-production.json
└── configuration-devel.json

如果 assembleDevel.*/assembleProduction.* 不是您正在寻找的任务,您可以将它们替换为例如:prepareDevel.*Dependencies/prepareProduction.*Dependencies

关于android - 在 Android gradle 构建开始时根据风格复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450615/

相关文章:

groovy - gradle.buildStarted 未触发

android - 不支持的方法 : AndroidArtifact. getBuildConfigFields()

android - 如何使用Tango3DR_updateTexture?

java - 如何在android中的相对布局上添加涟漪效应?

java - 错误: duplicate class while compiling java project with Gradle containing dagger generated sources

Android Gradle 依赖解析顺序

gradle - 即使按照之前的答案,也无法在 com.android.build.gradle.internal.api.ApplicationVariantImpl 上找到属性 'outputFile'

android - 是否保证广播接收器能够接收到针对他们的每条广播公告?

java - 无法删除 InvocableTargetException

android - IntelliJ IDEA的Crystax用法