【问题标题】:How to stop Android Studio from running my gradle task when syncing project with Gradle files?将项目与 Gradle 文件同步时,如何阻止 Android Studio 运行我的 gradle 任务?
【发布时间】:2018-08-14 06:47:21
【问题描述】:

来自docs,

当您更改您的构建配置文件时 项目,Android Studio 要求您同步项目文件,以便 它可以导入您的构建配置更改并运行一些 检查以确保您的配置不会产生构建错误。

我的 build.gradle 应用程序:

apply plugin: 'com.android.application'

android {
    //...  <--modified here
}

task myTask() {
    println 'doing something...'
    //time-consuming operations which may takes 16s or more
    println 'done'
}

我刚刚发现每次修改app的build.gradle时它都会运行myTask,即使我没有更改它。

运行一些检查以确保您的配置不会产生构建错误时这是正常操作吗?如果是这样,我怎样才能使同步时任务不运行?

环境:
带有 gradle-4.9-bin.zip 的 Android Studio 3.1.3

【问题讨论】:

  • 每次修改都会触发同步。这个是正常的。 Gradle 文件修改通常不会经常发生,因此通常不是问题。也许您的 Gradle 文件是使用“错误的想法”构建的?我的意思是:如果你应该经常编辑它,你确定这是个好方法吗?
  • 我认为有一些方法可以将任务标记为 no-need-to-check。所以同步时不会执行标有 的任务。我可以保证myTask 不会产生构建错误。
  • 您可以创建一个名为(例如)“NoTaskDebug”的“Build Variant”,并在您的 Gradle 文件过程中对 THAT Variant 进行检查。因此,您可以快速更改 Variant 以绕过该 IF 条件。 “构建变体”面板/窗口的屏幕截图:antoniocappiellocomblog.files.wordpress.com/2015/10/…

标签: android gradle


【解决方案1】:

你的任务根本没有运行,它只是配置好了。

Gradle 区分配置阶段和执行阶段。每次调用时,都会配置每个任务,但只执行传递给 Gradle 的任务及其任务依赖项。由于 IntelliJ / AndroidStudio 在同步时调用 Gradle,因此每个任务都是在同步时配置的。当您在 Gradle 中定义任务时,您传递的闭包用于配置。 执行阶段仅执行任务操作(内部功能)、doFirst 和 doLast 闭包。对于您的自定义任务,您应该将您的功能放入这样的闭包中:

task example {
    println 'Configuration' 
    doLast {
        println 'Execution' 
    } 
} 

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多