当存在多个风格/类型时,Gradle 是否支持仅针对某些风格/构建类型排除源文件



my source tree:

app/src/main/java/com/example/A.java
app/src/main/java/com/example/B.java

我想使用 productFlavor 或 buildType 自定义一些特定的构建。但我发现 sourceSet 中的排除语句也会影响其他产品风味/构建类型。

示例 1.

productFlavors {
    full {
        sourceSets {
            main {
                java {
                }
            }
        }
    }
    mini {
        sourceSets {
            main {
                java {
                    exclude '**/A.java'
                }
            }
        }
    }
}

构建后,两者

  app-mini-release.aar 

  app-full-release.aar 

都是一样的。

示例 2:

buildTypes {
    release {
        minifyEnabled true 
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
    debug {
        sourceSets {
            main {
                java {
                    exclude '**/A.java'
            }
        }
    }
}

构建后,两者

app-debug.aar 

app-release.aar 

包含 A.class

将 A.java 文件替换为从 app/src/main/java/com/example/ app/src/full/java/com/example/

之后,如果您在构建变体中选择miniDebug,它将从

app/src/full/*