为每个构建变体使用不同的 class

Use a different class for each build variant

我有一个应用程序 class,我希望它在每个构建变体(如调试和发布)中都不同。
这是我的地图:

app/      
   |      
   |----debug/          
             |----java\            
                       |----com.example.App.class       
             |----res\
                      |----mipmap-hdpi       
   |----main/          
             |----java\      
                      |----com.example.App.class       
             |----res\
                      |----mipmap-hdpi            

但是在 android studio 给我这个错误信息 "duplicate class found in ..."
但它在我的资源中没有显示任何错误。
我的问题是为什么 gradle 无法弄清楚 class 应该在不同的构建变体中使用什么,但它可以决定在不同的构建变体中必须使用什么资源。

main 下的代码在所有构建类型之间共享。因此 class 出现了两次,一次来自 debug 一次来自 main.

要获得构建类型特定的源文件,请将它们放在构建类型特定的文件夹下,而不是 main。例如,如果您有通常的 debugrelease 构建类型,请将另一个变体放在 release.

为什么资源不需要这个是因为 resource merging 可以覆盖构建类型上的资源。没有代码合并。