Android gradle buildTypes: Duplicate class
Я конвертирую свое приложение для использования gradle, и я пытаюсь использовать buildTypes. У меня есть класс Constants
, который я хочу изменить для моей сборки релиза. Поэтому у меня есть файл в src/main/java/my/package/name/Constants.java
и src/release/java/my/package/name/Constants.java
.
Когда я пытаюсь построить это, gradle сообщает мне, что сборка не удалось в файле Constants
в моей версии buildtype с ошибкой, что это дублированный класс.
Я также попробовал добавить другой sourceSet для этого в моем build.gradle
следующим образом:
sourceSets {
main {
java.srcDirs = ['src/main/java'];
//...
}
release {
java.srcDirs = ['src/release/java'];
}
}
Но это все равно дает мне ту же ошибку. Поэтому мне интересно, что я здесь делаю неправильно?
Ответы
Ответ 1
Вы не можете иметь класс в main
и release
. Вам нужно разбить его на что-то вроде debug
и release
.
gradle объединит исходные наборы для каждого buildType
с помощью main
.
Это причина, почему класс дублируется в вашей сборке release
.
Итак, это правило: поместите класс в main
или в каждый buildType
, но не оба.
Ответ 2
Ответ от "fix" помог мне в пути, но я получил сообщение об ошибке из основного Gradle, указав, что константа отсутствует (в моем классе Config). Это потому, что у меня был класс только в платной и бесплатной версии, а не в основном. Не удалось найти класс Config.
Я не уверен, что это ошибка в Studio... Я, наконец, решил ее со следующим:
buildTypes {
release {
...
buildConfig "public static final boolean XYZ = false;"
}
}
И вместо использования константы класса Config.XYZ я использовал buildConfig.XYZ