Android studio не распознает исходные папки
Я использую стандартную структуру каталогов Android Studio, и я создал различные типы сборки:
buildTypes {
debug {
runProguard false
packageNameSuffix ".debug"
signingConfig signingConfigs.debug
}
preview.initWith(buildTypes.debug)
preview {
packageNameSuffix ".preview"
}
release {
runProguard false
signingConfig signingConfigs.release
}
}
все компилируется нормально, но как не распознает все исходные папки.
Только папки под 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, или я делаю что-то не так?
4 ответа:
вы должны переключить его в списке вариантов сборки, а затем, как будет подобрать соответствующие исходные наборы.
во-первых, попробуйте повторно импортировать проект. Удалите все ваши каталоги сборки,
.iml
файлы и . Затем импортируйте проект.если это не сработает, то вы можете попробовать это, чтобы "заставить его". проверьте этот ответ от Бернда Берглера.обратите внимание, что это хак, и в идеале не нужно
вот немного измененная версия его кода.
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 { it.@url == 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) }
просто бросьте это в свой за пределами элемент . описание из этого источника:
в Android Studio автоматически генерирует .iml файлы проекта из gradle создавайте файлы. Эта задача изменяет приложение файл проекта Android Studio.iml и добавляет тестовый каталог. Изменения теряются всякий раз, когда Android Студия повторно сканирует файлы gradle, но сразу после этого она запускает сборку и задача зацепилась за это, так что все хорошо. Эта версия имеет несколько настроек, таких как добавление нового задача в обычную сборку цикл немного по-другому, и изящно обрабатывать отсутствие .iml-файл.
это сработало в некоторой степени для меня: IDE теперь распознает его как дерево src, но не хочет связывать его с другими деревьями src.