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 {
答案 0 :(得分:1)
您不能这样做。
src/debug/java/activityCartActivity
src/main/java/activityCartActivity
检查official doc:
java /目录中的所有源代码都被编译在一起以生成单个输出。
尤其是:
注意:对于给定的构建变体,如果Gradle遇到两个或多个定义了相同Java类的源集目录,则Gradle会引发构建错误。 例如,在构建调试APK时,您无法同时定义
src/debug/Utility.java
和src/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']
}
}