Ответ 1
Вам нужно переключить его в списке вариантов сборки, затем AS заберет соответствующие исходные наборы.
Я использую стандартную структуру каталогов Android Studio, и я создал разные типы сборки:
buildTypes {
debug {
runProguard false
packageNameSuffix ".debug"
signingConfig signingConfigs.debug
}
preview.initWith(buildTypes.debug)
preview {
packageNameSuffix ".preview"
}
release {
runProguard false
signingConfig signingConfigs.release
}
}
все компилируется отлично, но AS не распознает все исходные папки.
Только папки под main
и debug
помечены как источник, папки под preview
и release
отображаются как обычные папки
По сути, в этих папках нет проверки ошибок.
Я проверил файл .iml, и теги sourceFolder не были добавлены.
Если я отредактирую файл iml проекта вручную, добавив строки:
<sourceFolder url="file://$MODULE_DIR$/src/preview/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/preview/res" type="java-resource" />
Кажется, что все нормально.
... пока не синхронизируюсь с моим файлом gradle, который удаляет указанные выше строки.
Является ли это ошибкой в плагине gradle, или я делаю что-то неправильно?
Вам нужно переключить его в списке вариантов сборки, затем AS заберет соответствующие исходные наборы.
Сначала попробуйте повторно импортировать проект. Удалите все ваши каталоги сборки, файлы .iml
и папку .idea
. Затем импортируйте проект.
Если это не сработает, вы можете попробовать это, чтобы "заставить его". Оформить этот отзыв от Бернда Берглера. Обратите внимание, что это взломать и в идеале не нужно
Вот немного измененная версия его кода.
task addPreview {
def src = ['src/preview/java']
def file = file("app.iml")
doLast {
try {
def parsedXml = (new XmlParser()).parse(file)
def node = parsedXml.component[1].content[0]
src.each {
def path = 'file://$MODULE_DIR$/' + "${it}"
def set = node.find { [email protected] == path }
if (set == null) {
new Node(node, 'sourceFolder', ['url': 'file://$MODULE_DIR$/' + "${it}", 'isTestSource': "false"])
def writer = new StringWriter()
new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
file.text = writer.toString()
}
}
} catch (FileNotFoundException e) {
// nop, iml not found
}
}
}
// always do the addPreview on prebuild
gradle.projectsEvaluated {
preBuild.dependsOn(addPreview)
}
Просто отбросьте это в своем build.gradle
файле вне раздела android
.
Описание из этого источника:
Android Studio автоматически создает файлы проекта .iml из gradleсоздавать файлы. Эта задача редактирует файл проекта Android Studio app.iml и добавляет тестовый каталог. Изменения теряются всякий раз, когда Android Studio rescans gradle, но сразу после этого запускает сборку и задача связана с этим, поэтому все это хорошо. Эта версия имеет пара настроек, таких как добавление новой задачи в обычную сборку немного по-другому, и изящно обрабатывать отсутствие .iml файл.
Это для меня в определенной степени работает: IDE теперь распознает его как дерево src, но не хочет связывать его с любыми другими деревьями src.
В моем случае мне помогли только File → Invalidate Caches/Restart, поэтому, если вышеприведенные решения для вас не работают - попробуйте это.
Добавьте это в свой файл сборки build.gradle:
sourceSets {
main.java.srcDirs += 'src/preview/java'
main.java.srcDirs += 'src/release/java'
}