Android 将gradle任务的输入声明为多个文件

Android 将gradle任务的输入声明为多个文件,android,gradle,Android,Gradle,我们有一个gradle任务,它将在构建之前自动为我们生成代码。以下为例, task djinniTask(type: org.gradle.api.tasks.Exec) { commandLine 'sh', './Djinni/run_djinni.sh' } assembleDebug.dependsOn djinniTask 基本上,上面的run_djini.sh使用一个库来生成JNI代码。上面的工作很好,只是每次构建时它都会运行这个脚本,即使我们没有更新脚本文件,这显然不是

我们有一个gradle任务,它将在构建之前自动为我们生成代码。以下为例,

task djinniTask(type: org.gradle.api.tasks.Exec) {
    commandLine 'sh', './Djinni/run_djinni.sh'
}

assembleDebug.dependsOn djinniTask
基本上,上面的run_djini.sh使用一个库来生成JNI代码。上面的工作很好,只是每次构建时它都会运行这个脚本,即使我们没有更新脚本文件,这显然不是很有效。我们做了一点研究,发现。因此,以下方法可以很好地工作。如果我们没有修改run\u djinni.sh,它将跳过此任务

task transform {
    ext.srcFile = file('./Djinni/run_djinni.sh')
    ext.destDir = new File(buildDir, 'generated')
    doLast {
        commandLine 'sh', './Djinni/run_djinni.sh'
    }
}

现在的问题是,run_djini.sh不是我们拥有的唯一脚本文件。这个项目很大,我们有多个脚本文件,比如:run\u foo\u djinni.shrun\u bar\u djinni.sh等等。run\u djinni.sh将调用其他每个脚本。那么,有没有一种方法可以将gradle任务的输入声明为多个文件,例如,在我们的例子中,djini文件夹下的每个文件

好,根据gradle可以定义多个输入:

task transform {
   inputs.files('file path', 'another file path')
}

如果您定义多个转换任务
transform1
transform2
等,并添加依赖于它们的
transform
任务,该怎么办?@EugenMartynov,谢谢您的建议!事实上,这是可行的。但是,如果我们能找到一种不需要像这样列出gradle脚本中的每个文件的方法,那就更好了。从run_djini.sh生成的代码不仅被Android使用,还被我们的iOS项目和Windows项目使用。因此,最好把所有东西都放在一个地方。否则,添加run_baz_djini.sh的未来开发人员可能不知道他需要同时更新run_djini.sh和gradle脚本。