Android gradle构建类型:重复类

Android gradle构建类型:重复类,android,build,gradle,source-sets,Android,Build,Gradle,Source Sets,我正在将我的应用程序转换为使用gradle,并尝试使用BuildType。我有一个Constants类,我希望为我的发布版本修改它。所以我在src/main/java/my/package/name/Constants.java和src/release/java/my/package/name/Constants.java有一个文件 当我尝试构建它时,gradle告诉我,在我的release buildtype中的Constants文件上构建失败,错误是它是一个重复的类 我还尝试在我的build

我正在将我的应用程序转换为使用gradle,并尝试使用BuildType。我有一个
Constants
类,我希望为我的发布版本修改它。所以我在
src/main/java/my/package/name/Constants.java
src/release/java/my/package/name/Constants.java
有一个文件

当我尝试构建它时,gradle告诉我,在我的release buildtype中的
Constants
文件上构建失败,错误是它是一个重复的类

我还尝试在我的
build.gradle
中为此添加一个不同的源集,如下所示:

sourceSets {
    main {
        java.srcDirs = ['src/main/java'];
        //...
    }
    release {
        java.srcDirs = ['src/release/java'];
    }
}

但这仍然给了我同样的错误。所以我想知道,我做错了什么?

main
release
中不能有类。您需要将其拆分为
debug
release

gradle将每个
buildType
的源集与
main
合并
这就是类在
版本中被复制的原因

所以规则是:将一个类放入
main
,或者放入every
buildType
,但不能同时放入两者。

来自“fix”的答案帮助了我,但我从主Gradle得到了一个错误,说(在我的类配置中)缺少一个常量。这是因为我的课程只有付费和免费版本,而不是主要版本。找不到配置类。 我不确定这是否是工作室里的一个bug。。。我最终用以下方法解决了这个问题:

buildTypes {

    release {
        ...
        buildConfig "public static final boolean XYZ = false;"
    }

}

我使用buildConfig.XYZ来代替Config.XYZ类常量,如果将类A放入buildType付费和免费,main会抱怨缺少类A。如何处理它?文档说明可以使用相同的包名和类名覆盖类,但它不起作用:(除非我遗漏了什么,否则文档中说,如果同一个类的类名/包名不同,那么它们可以具有相同的类名/包名。如果一个在
main
中,另一个在某个味道中,则情况并非如此。@tir38这里的文档很清楚。如果该类存在于味道中,请使用动态类加载和接口加载该类。或者使用
buildConfigField“boolean”、“XYZ”、“false”