Android gradle构建类型:重复类
我正在将我的应用程序转换为使用gradle,并尝试使用BuildType。我有一个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
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
,或者放入everybuildType
,但不能同时放入两者。来自“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”