为什么在 build.gradle 中打印发布和调试消息?

Why print release and debug message in build.gradle?

build.gradle
buildTypes {
  release {
    println('release')
  }
  debug {
    println('debug')
  }
}

当我执行 ./gradlew assembleDebug 时,打印消息

release
debug

为什么打印发布消息?没看懂。

我想在发布模式下执行一些代码,但在调试模式下也可以执行,我该怎么办?

buildTypes {
        release {
            println('release')
            packagingOptions {
                println('release packaging options')
                exclude 'lib/armeabi/*.so'
            }
            ndk {
                abiFilters 'armeabi-v7a'
            }
            shrinkResources true
            minifyEnabled true
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String", "BUILDTIME", "\"${buildTime()}\""
            buildConfigField "boolean", "RELEASE", "true"
        }
        debug {
            println('debug')
            ndk {
                abiFilters 'armeabi', 'armeabi-v7a'
            }
            minifyEnabled false
            buildConfigField "String", "BUILDTIME", "\"${buildTime()}\""
            buildConfigField "boolean", "RELEASE", "false"
        }

    }

当我运行./gradlew assembleDebug,打印消息

release
release packaging options
debug

我该怎么办?我不想在调试模式下执行发布语句。

打印消息是因为 println 语句是在 任务声明/初始化 阶段执行的。这并不意味着任务已执行

要了解为什么即使您没有执行任何任务也会打印消息,您需要了解 Gradle 构建生命周期的构建阶段,即 初始化配置执行

大多数脚本将在配置阶段运行。文件 settings.gradle 下的设置将在 初始化 阶段执行。 doFirst{}doLast{} 中的语句在 执行 阶段将是 运行。

针对您的情况

buildTypes {
  release {
     println('release')
  }
  debug {
     println('debug')
  }
}

以上代码实际上是 运行 在项目 配置 阶段,消息将在控制台中看到。

How can I do ? I want not execute release statement in debug mode.

当你 运行

./gradlew assembleDebug

即使您看到发布消息,它也不会影响调试命令的调试输出。

查看官方文档:https://docs.gradle.org/current/userguide/build_lifecycle.html .