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.
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
andsrc/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.