【问题标题】:Gradle - execute only single build typeGradle - 仅执行单一构建类型
【发布时间】:2018-08-30 06:53:42
【问题描述】:

我在 build.gradle 中定义了多种构建类型。在变体窗口中,我选择了构建变体(例如 debugAPI23)。我预计只会执行一种构建类型的代码。但在 Gradle 控制台中,我可以看到所有构建类型的输出。

如您所见,我正在尝试删除每种构建类型的特定文件。但是每次执行所有构建类型时。所以最后我错过了我选择的构建类型应该存在的文件。

android {
    buildTypes {
        debug {
            println "build type debug"
            debuggable true
            signingConfig signingConfigs.debug

            sourceSets {
                main.java {
                    exclude '/cz/kctdata/kmf/Reader/KMFReaderCN51A60.java'
                }

                main.java.getIncludes().each { println "Added include: $it" }
                main.java.sourceFiles.each { println "File in source set: " + it }
            }
        }
        release {
            println "build type release"
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            sourceSets {
                main.java {
                    exclude '/cz/kctdata/kmf/Reader/KMFReaderCN51A60.java'
                }

                main.java.getIncludes().each { println "Added include: $it" }
                main.java.sourceFiles.each { println "File in source set: " + it }
            }
        }
        debugAPI23 {
            println "build type debugAPI23"
            debuggable true
            signingConfig signingConfigs.debug

            sourceSets {
                main.java {
                    exclude '/cz/kctdata/kmf/Reader/KMFReaderCN51A42.java'
                }

                main.java.getIncludes().each { println "Added include: $it" }
                main.java.sourceFiles.each { println "File in source set: " + it }
            }
        }
        releaseAPI23 {
            println "build type releaseAPI23"
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

            sourceSets {
                main.java {
                    exclude '/cz/kctdata/kmf/Reader/KMFReaderCN51A42.java'
                }

                main.java.getIncludes().each { println "Added include: $it" }
                main.java.sourceFiles.each { println "File in source set: " + it }
            }
        }
    }
}

我不能使用特定于构建类型的文件夹,因为我有更多构建类型,并且一些文件应该以多种构建类型呈现。我不想在我的项目中拥有同一个文件的多个副本。

【问题讨论】:

    标签: android gradle android-build-type


    【解决方案1】:

    最后一个 gradle android 插件有一个“维度”的新概念。 https://developer.android.com/studio/build/build-variants.html

    因此,您可以尝试使用风味和维度。一个例子:

    android {
        flavorDimensions "dim1", "dim2"
    }
    
    productFlavors {
        flavor1 {
            dimension "dim1"
        }
        flavor2 {
            dimension "dim1"
        }
        flavor3 {
            dimension "dim1"
        }
        flavor4 {
            dimension "dim2"
        }
    }
    

    在这里,您将获得构建类型 + 偏好与 dim1 + 风味与 dim2 之间的组合,换句话说,来自风味 4 的文件可以在所有风味中访问。例如,在变体 debugFlavor1Flavor4 中,您将拥有属于 debug、flavor1 和 flavor4 的所有资源

    【讨论】:

    • 我不得不改变我的逻辑,但这是正确的方法。最后,它就像一个魅力。谢谢。
    【解决方案2】:

    您可以通过 Android Studio 中的终端窗口进行构建,手动选择您想要的风格/构建变体:

    ./gradlew assembleRelease
    

    或者:

    ./gradlew assembleDebug
    

    或者:

    ./gradlew assemble debugAPI23
    

    【讨论】:

    • 这太棒了,但它仍然执行所有 buildTypes 块。
    • @Sonny 没错!你有没有想过如何只在 Debug 或 Release 等中运行某些东西?
    • @JoshuaPinter 好吧,是的,不是的。我最终得到了接受的答案。但回想起来,我不得不说这是一个不错的选择。
    【解决方案3】:

    我可以使用产品风味来做到这一点,假设我有三种风味(Stage、Prod、QA)。然后我可以使用以下命令创建构建:-

    1. 带有 releaseAPI23 的产品(将在 PROJECT/android/app/build/outputs/apk/prod/releaseAPI23 创建构建)

    ./gradlew assembleProdReleaseAPI23.

    1. 使用 releaseAPI23 进行 QA(将在 PROJECT/android/app/build/outputs/apk/qa/releaseAPI23 创建构建)

    ./gradlew assembleQaReleaseAPI23.

    1. 使用 releaseAPI23 的阶段(将在 PROJECT/android/app/build/outputs/apk/stage/releaseAPI23 创建构建)

    ./gradlew assembleStageReleaseAPI23.

    **您可以根据需要尝试不同的变体

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2019-01-17
      相关资源
      最近更新 更多