Gradle - выполнить только один тип сборки

У меня есть несколько типов сборки, определенных в моем build.gradle. В окне вариантов я выбрал вариант сборки (ex debugAPI23). Я ожидал, что код только в одном типе сборки будет выполнен. Но в Gradle Console я вижу вывод для всех типов сборки.

Как видите, я пытаюсь удалить конкретный файл для каждого типа сборки. Но каждый раз все типы сборки выполняются. Так что в итоге мне не хватает файла, который должен присутствовать для моего выбранного типа сборки.

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 }
            }
        }
    }
}

Я не могу использовать конкретную папку типа сборки, потому что у меня больше типов сборки, и некоторые файлы должны быть представлены в нескольких типах сборки. Я не хочу иметь несколько копий одного и того же файла в моем проекте.

2 ответа

Решение

Последние плагины для 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 + flavour с dim2, другими словами, файлы из flav4 будут доступны во всех вариантах. Например, в варианте debugFlavor1Flavor4 у вас будут все ресурсы, которые относятся к debug, flav1 и flav4

Вы можете создать окно терминала в Android Studio, выбрав вручную, какой вариант вкуса / сборки вы хотите:

./gradlew assembleRelease

Или же:

./gradlew assembleDebug

Или же:

./gradlew assemble debugAPI23

Я смог сделать это с ароматизаторами продукта, предположим, у меня есть три вкуса (Stage, Prod, QA) . Затем я могу создавать сборки с помощью следующих команд:-

  1. prod с releaseAPI23 (создаст сборку в PROJECT/android/app/build/output / apk / prod / releaseAPI23)

./gradlew сборка ProdReleaseAPI23.

  1. QA с releaseAPI23 (создаст сборку в PROJECT/android/app/build/output / apk / qa / releaseAPI23)

./gradlew assemblyQaReleaseAPI23.

  1. Этап с releaseAPI23 (сборка будет создана в PROJECT/android/app/build/output / apk / stage / releaseAPI23)

./gradlew assemblyStageReleaseAPI23.

** Вы можете попробовать разные варианты в соответствии с вашими потребностями

Другие вопросы по тегам