android two buildTypes - error: duplicate class

android two buildTypes - error: duplicate class

Android Studio 3.4

我有 2 种构建类型:

debug
release

所以我的项目结构是:

src/debug/java/

src/main/java/

src/release/java/

我有CartActivity。此 class 对 release 版本和 debug 版本有不同的实现。 所以这个class位置在两个文件夹中:

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 {

将 CartActivity class 从 'src/main/java/activityCartActivity' 移动到 src/release/java/activityCartActivity'。

"If above mentioned change does not work" 将 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']
        }

    }

做不到

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

勾选 official doc:

All source code in the java/ directories are compiled together to generate a single output.

特别是:

Note: For a given build variant, Gradle throws a build error if it encounters two or more source set directories that have defined the same Java class. For example, when building a debug APK, you cannot define both src/debug/Utility.java and src/main/Utility.java. This is because Gradle looks at both these directories during the build process and throws a "duplicate class" error. If you want different versions of Utility.java for different build types, you can have each build type define its own version of the file and not include it in the main/ source set.