В крупным проектах существует распространённая проблема, когда папка с ресурсами растёт и растёт, из-за чего её становится сложно организовать и содержать в порядке. Однако существует очень простой способ решения проблемы: создание большего числа папок 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 позволяет нам организовывать наши проекты так, как мы хотим, и мы можем воспользоваться им в некоторых ситуациях, чтобы обойти ограничения. Это только один пример, но вы можете усовершенствовать этот способ, чтобы достичь своих целей.