Android的两个buildTypes-错误:重复的类

时间:2019-05-21 14:50:43

标签: android-gradle

Android Studio 3.4

我有2种构建类型:

debug
release

所以我的项目结构是:

src/debug/java/

src/main/java/

src/release/java/

我有CartActivity。此类针对release版本和debug版本具有不同的实现。 因此,此类位置位于两个文件夹中:

src/debug/java/activityCartActivity
src/main/java/activityCartActivity

但是当我用gradlew assemble构建项目时,会出现错误:

> Task :scanlib:processDebugJavaRes NO-SOURCE
> Task :scanlib:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug
> Task :app:javaPreCompileDebug FROM-CACHE

> Task :app:compileDebugJavaWithJavac FAILED
\app\src\debug\java\com\myproject\app\cart\CartActivity.java:66: error: duplicate class: com.myproject.app.cart.CartActivity
public class CartActivity extends AppCompatActivity {

2 个答案:

答案 0 :(得分:1)

不能这样做。

src/debug/java/activityCartActivity
src/main/java/activityCartActivity

检查official doc

  

java /目录中的所有源代码都被编译在一起以生成单个输出。

尤其是:

  

注意:对于给定的构建变体,如果Gradle遇到两个或多个定义了相同Java类的源集目录,则Gradle会引发构建错误。 例如,在构建调试APK时,您无法同时定义 src/debug/Utility.javasrc/main/Utility.java。这是因为Gradle在运行期间会同时查看这两个目录构建过程并引发“重复类”错误。如果要为不同的构建类型使用不同版本的Utility.java,则可以让每种构建类型定义其自己的文件版本,而不将其包含在main /源代码集中。

答案 1 :(得分:0)

将CartActivity类从“ src / main / java / activityCartActivity”移动到“ src / release / java / activityCartActivity”。

“如果上述更改无效”,将app / build.gradle中的java源路径修改为

sourceSets {
        main {
            //java.srcDirs = ['src/main/java']
            aidl.srcDirs = ['src/main/aidl']
            renderscript.srcDirs = ['src/main/rs']
            jni.srcDirs = []
            jniLibs.srcDirs = []
            res.srcDirs = ['src/main/res']
            assets.srcDirs = []
        }
        test{
            java.srcDirs = ['test']
        }
        debug {
            java.srcDirs = ['src/debug/java']
        }
        release {
            java.srcDirs = ['src/release/java']
        }

    }