如何在使用不同风格的相同命名类时防止重复类错误?

Posted

技术标签:

【中文标题】如何在使用不同风格的相同命名类时防止重复类错误?【英文标题】:How do I prevent Duplicate Class error while using same named class in different flavors? 【发布时间】:2019-03-12 11:48:07 【问题描述】:

首先,我刚刚在 *** 中检查了很多关于这个问题的主题,但没有一个能解决我的问题。我的问题是;我有两种不同的口味,分别是主要口味和实验性口味。 main 是默认风格。我只想在实验性构建变体中覆盖或使用我的 A.java,但这会导致我发现重复类错误。我如何防止或解决此问题,因为我相信可以通过风味使用相同的命名类?还是我做错了什么?我希望你能帮助我解决我的问题。提前致谢。

项目结构

应用程序 源 主要 Java 核心 A.java 实验性 Java 核心 A.java

build.gradle

productFlavors main dimension = "default" applicationId "com.example.yekta.basicApp.main" experimental dimension = "default" applicationId "com.example.yekta.basicApp.experimental" sourceSets main java.srcDirs = ['src/main/java'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] experimental java.srcDirs = ['src/experimental/java'] res.srcDirs = ['src/experimental/res'] assets.srcDirs = ['src/experimental/assets']

【问题讨论】:

【参考方案1】:

第 1 步:将您的一种风味从 main 重命名为除 maintestandroidTest 之外的任何其他有效值(或者,在您的情况下,为 experimental,因为您已经有了同名的味道)

第 2 步:使用您在第 1 步中选择的名称为新重命名的风味设置源集

步骤 #3:将 A.javamain 移动到您在步骤 #2 中创建的源集

main 源代码集用于将在所有产品风格和构建类型中使用的代码。您无法通过尝试将 main 转变为产品风味来改变这一点。

请注意,在 Android Studio 3.2 上,尝试定义名为 main 的产品风格似乎会导致构建崩溃 — 至少,当我尝试重现此问题时它会崩溃。

【讨论】:

我将那个味道重命名为experimentalTwo,但它仍然显示;在文件位于该 A.class 文件的主目录中 中找到重复的类。现在,我在项目中有三个 A.java。第一个在实验目录下。第二个在experimentalTwo目录下,最后一个在主目录下。 @YektaSarıoğlu:main 中不能有A.java——所有实现都必须在产品风格中(并且每个产品风格都需要一个实现)。这就是为什么我建议您将 A.javamain 移动到新的源集。 我错过了那部分。现在,它起作用了。谢谢你的帮助,@CommonsWare

以上是关于如何在使用不同风格的相同命名类时防止重复类错误?的主要内容,如果未能解决你的问题,请参考以下文章

java中的包(package)

命名规范

Rails 和 RSpec:在不同的命名空间(模块)中测试具有相同名称的控制器

今天写工具类时所犯的错误

当某些列是不同的类时如何对所有变量进行线性回归[重复]

Java eclipse中创建项目以后缺省包和命名的包有啥区别?