android два buildTypes - ошибка: повторяющийся класс - PullRequest
1 голос
/ 21 мая 2019

Android Studio 3.4

У меня есть 2 типа сборки:

debug
release

, поэтому структура моего проекта:

src/debug/java/

src/main/java/

src/release/java/

У меня есть CartActivity.Этот класс имеет различную реализацию для release версии и debug версии.Таким образом, это местоположение класса находится в TWO папках:

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 ]

1 голос
/ 22 мая 2019

Вы не можете сделать это.

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

Проверьте официальный документ :

Весь исходный код в каталогах java / скомпилирован для создания единого вывода.

А в частности:

Примечание: Для данного варианта сборки Gradle выдает ошибку сборки, если он сталкивается с двумя или более каталогами исходных наборов, которые определили один и тот же класс Java. Например, при создании отладочного APK вы не можете определить оба значения: src/debug/Utility.java и src/main/Utility.java. Это происходит потому, что Gradle просматривает оба этих каталога в процессе сборки и выдает " Двойной класс "ошибка. Если вам нужны разные версии Utility.java для разных типов сборки, вы можете настроить каждый тип сборки на определение своей версии файла и не включать ее в основной / исходный набор.

0 голосов
/ 21 мая 2019

Перемещение класса CartActivity из 'src / main / java / activityCartActivity' в src / release / java / activityCartActivity '.

«Если вышеупомянутое изменение не работает», измените исходный путь Java в app / build.gradle как

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']
        }

    }
...