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),我可以用产品口味做到这一点。然后我可以使用以下命令创建构建:-
- prod with releaseAPI23(将在 PROJECT/android/app/build/outputs/apk/prod/releaseAPI23 处创建构建)
./gradlew assembleProdReleaseAPI23.
- 使用 releaseAPI23 进行质量检查(将在 PROJECT/android/app/build/outputs/apk/qa/releaseAPI23 处创建构建)
./gradlew assembleQaReleaseAPI23.
- 发布 API23 阶段(将在 PROJECT/android/app/build/outputs/apk/stage/releaseAPI23 处创建构建)
./gradlew assembleStageReleaseAPI23.
**您可以根据需要尝试不同的变体
我的 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),我可以用产品口味做到这一点。然后我可以使用以下命令创建构建:-
- prod with releaseAPI23(将在 PROJECT/android/app/build/outputs/apk/prod/releaseAPI23 处创建构建)
./gradlew assembleProdReleaseAPI23.
- 使用 releaseAPI23 进行质量检查(将在 PROJECT/android/app/build/outputs/apk/qa/releaseAPI23 处创建构建)
./gradlew assembleQaReleaseAPI23.
- 发布 API23 阶段(将在 PROJECT/android/app/build/outputs/apk/stage/releaseAPI23 处创建构建)
./gradlew assembleStageReleaseAPI23.
**您可以根据需要尝试不同的变体