Gradle是否支持在存在多个风味/类型时仅排除某些风味/构建类型的源文件?

5

我的源代码树:

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

我希望使用productFlavor或buildType来定制一些特定的构建。但是我发现,sourceSets中的排除语句会影响其他的productFlavor/buildType。

示例 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

1个回答

0

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

之后,如果您在构建变体中选择 miniDebug,则会排除以下文件:

app/src/full/*


我不想将源文件分离到主目录之外,A和B应该在同一个包中,这对我来说更有意义。 - fluke
1
构建将合并您的包,因此它们不会在不同的包中,您只需为构建器分离它。请查看链接 https://developer.android.com/studio/build/build-variants.html#product-flavors “您应该像 main/ sourceset 一样精确地结构化其他 sourceset 目录,除了根目录的名称必须与其所属的构建类型、产品口味或构建变体的名称完全匹配。” - bendaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接