安卓工作室/ Gradle : run external tool before compilation

标签 android gradle

我有一个包含多个模块的 Android Studio 项目。

其中一些模块在编译之前需要运行外部预处理工具。另外,每次编译项目中的任何模块时,我还需要在项目范围内运行另一个工具

不幸的是,我是 Gradle 的新手,我有点不知所措。我通过编辑 settings.gradle 成功地在我的项目中包含了一个新的 Gradle 脚本,并且我在其中编写了一些运行我想要运行的工具的 Gradle 任务,这很好。 但问题是我不明白如何将它们连接起来以便在正确的时间执行它们。

基本上,我想知道如何编辑我的构建脚本以便:

A) 始终在构建项目中的任何模块之前运行某个 gradle 任务。 (如果可能的话,我希望它只运行一次,因为如果我重建由 20 多个模块组成的整个项目,我不希望它运行 20 次,只运行一次。这是次要的不过,最主要的是它需要在每次构建项目中的任何模块时运行)
B) 总是 在构建某个模块之前运行某个 gradle 任务。换句话说:如何编辑单个特定模块的构建脚本以便在编译前运行特定任务?请注意,在这种情况下,调用的任务需要能够知道哪个 gradle 项目调用了它,即:正在编译哪个模块。

希望问题很清楚,如有必要我会澄清(正如我所说,我是 Gradle 的新手,希望我没有把术语弄乱太多)

最佳答案

A 的答案是任务依赖性,我假设当您说模块时您指的是子项目,即您包含在 settings.gradle 中的子项目。如果所有这些子项目都需要先运行此任务,我将定义子项目:

subprojects {
    apply plugin: 'java'

    task precompiletask() {
        println "Executing pre-compile task"
    }

    compileJava.dependsOn precompiletask
}

如果您正确设置任务并输入/输出,您可能会免费获得 A 的第二部分。这是 gradle 检查是否需要再次重新运行任务的内容。如果输入/输出没有任何变化,那么它将不会运行预编译任务并将跳过它。

对于 B 部分,我要做的是找到这些项目之间的共同属性并配置它们:

configure(someProjects()) {
    // do whatever you want here to those projects
    // for example, set up pre compile task like the one above
}

def someProjects() {
        ext.someProjects = [] as Set

        ext.someProjects.addAll subprojects.findAll { Project aProject ->
            // filter here what's common with those projects
            // for example, all projects that have yml file
        }

        logger.debug("Some projects [{}]", ext.someProjects)

        ext.someProjects
}

希望这对您有所帮助,玩得开心:)

关于安卓工作室/ Gradle : run external tool before compilation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845202/

相关文章:

android - TaskGraph.useFilter 替代 kotlin dsl

android - 使用gradle构建android项目

java - 如何在 Gradle 项目中包含 JMonkey 测试数据 jar?

groovy - 如何在 Gradle API 文档中导航?

android - getIntger() -> getLong()?

java - 使用 AsyncTaskLoader 更新位置数据 UI?

android - 使用 DrawerLayout 和 Collapses ToolbarLayout 无法获得透明状态栏

android - 以编程方式退出应用程序

android - 更新 Gradle 到 2.10 错误

android - 在 Google Drive App 文件夹中存储房间数据库?