Gradle - 只执行单一构建类型

Gradle - execute only single build type

我的 build.gradle 中定义了多种构建类型。在变体 window 中,我选择了构建变体(例如 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 }
            }
        }
    }
}

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

最后 gradle android 个插件有一个新概念 "dimensions"。 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"
    }
}

在这里,您将获得构建类型 + favor with dim1 + flavor with dim2 的组合,换句话说,来自 flavor4 的文件可以在所有口味中访问。例如,在变体 debugFlavor1Flavor4 中,您将拥有属于 debug、flavor1 和 flavor4

的所有资源

您可以在 Android Studio 中通过终端 window 构建,手动选择您想要的 flavor/build 变体:

./gradlew assembleRelease

或者:

./gradlew assembleDebug

或者:

./gradlew assemble debugAPI23

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

  1. prod with releaseAPI23(将在 PROJECT/android/app/build/outputs/apk/prod/releaseAPI23 处创建构建)

./gradlew assembleProdReleaseAPI23.

  1. 使用 releaseAPI23 进行质量检查(将在 PROJECT/android/app/build/outputs/apk/qa/releaseAPI23 处创建构建)

./gradlew assembleQaReleaseAPI23.

  1. 发布 API23 阶段(将在 PROJECT/android/app/build/outputs/apk/stage/releaseAPI23 处创建构建)

./gradlew assembleStageReleaseAPI23.

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