В крупным проектах существует распространённая проблема, когда папка с ресурсами растёт и растёт, из-за чего её становится сложно организовать и содержать в порядке. Однако существует очень простой способ решения проблемы: создание большего числа папок res. Таким образом, можно разделить ресурсы по разным категориям, после чего станет намного легче отслеживать ресурсы, которые вы создали.
Например, представьте, что у вас есть проект, содержащий три различных файла разметки в зависимости от типа устройства, например, мобильные устройства, телевизоры и Android TV. Вы можете создать три папки и разделить эти ресурсы, сохранив оригинальную папку для общих компонентов.
Как настроить несколько папок ресурсов
Gradle — очень мощный инструмент. Он имеет множество конфигураций по умолчанию, поэтому нам не нужно переписывать их каждый раз, когда мы создаём проект. Например, папка ресурсов всегда находится по умолчанию в src/main/res. Но мы можем изменить это, воспользовавшись секцией sourceSets в файле build.gradle модуля приложения.
Примечание: прежде чем приступить к добавлению каталогов в Gradle, следует создать их вручную.
android {
...
sourceSets {
main.java.srcDirs = ['...']
main.assets.srcDirs = ['...']
main.res.srcDirs = ['...']
test.java.srcDirs = ['...']
}
}
Как вы видите, можно определить не только каталог res, но java, assets и каталоги с тестами. Если вместо того, чтобы задать другой каталог по умолчанию, вы хотите добавить ещё один, вы можете сделать это следующим образом:
sourceSets {
main.java.srcDirs += '...'
main.assets.srcDirs += '...'
main.res.srcDirs += '...'
test.java.srcDirs += '...'
}
Как можно догадаться, эти строки просто добавят указанную папку к наборам папок для данного типа. Добавить три новые папки res можно следующим образом:
sourceSets {
main.res.srcDirs += 'src/main/res-mobile'
main.res.srcDirs += 'src/main/res-tv'
main.res.srcDirs += 'src/main/res-android-tv'
}
Или если вы хотите записать всё в одну строку:
sourceSets {
main.res.srcDirs += ['src/main/res-mobile', 'src/main/res-tv', 'src/main/res-android-tv']
}
В результате мы получаем следующее:
Заключение
Gradle позволяет нам организовывать наши проекты так, как мы хотим, и мы можем воспользоваться им в некоторых ситуациях, чтобы обойти ограничения. Это только один пример, но вы можете усовершенствовать этот способ, чтобы достичь своих целей.



