Gradle始终执行任务

时间:2016-12-11 00:26:31

标签: android android-gradle build.gradle gradlew

我为Gradle flavors添加了3个配置。我向它们添加了一些zip依赖项。我在preBuild之后解压缩这个zip文件。 问题是我的解压缩任务总是执行甚至gradle文件或未更改的依赖项。这个解压缩任务需要时间,我正在开发ndk应用程序。每次当我使用解压缩任务更改静态库时,gradle认为库已更改,因此它再次构建。

如果gradle文件没有更改,我想阻止执行解压缩任务。这看起来像一个小缓存机制。这是我的gradle任务。

dependencies {
    compile "com.google.android.gms:play-services:9.4.0"
    compile 'com.android.support:multidex:1.0.0'
    compile 'com.android.support:appcompat-v7:24.+'
    compile 'com.android.support:design:24.+'
    compile fileTree(dir: 'src/main/libs', include: ['*.jar'])
    alphaCompile 'my alpha release static library from private maven repository in zip type'
    betaCompile 'my beta release static library from private maven repository in zip type'
    prodCompile 'my prod release static library from private maven repository in zip type'
}


task unzip(group: "Static Libraries", description: "Unzip all static libraries") {
    doFirst{
        // get zip files from configurations
        // unzip and move static libraries to destination folder
        }
    }
}
preBuild.finalizedBy (unzip)

1 个答案:

答案 0 :(得分:1)

很难给出一个确切的答案,因为你已经排除了doFirst块中的代码,但如果您只是获取配置文件然后解压缩,看起来您可以利用Copy任务他们在其他地方:

tasks.create('unzip', Copy) {
  dependsOn configurations.alphaCompile
  from {
    project.configurations.alphaCompile.collect { zipTree(it) }
  }
  into project.file("${project.buildDir}/unzipDir/")
}

如果确实需要定义自定义任务,则需要使用configurationTask.getInputs()Task.getOutputs()阶段注册输入和输出,以便Gradle可以在执行前进行检查。