material-components-android の catalog で、resフォルダが細分化されているのを見つけたので、どうやっているのかを調べました。
sourceSetsを定義
appのbuild.gradleに対し、sourceSetsとresを置きたい場所を定義します。
srcDirsに書かれたフォルダをresフォルダに追加しています。
build.gradle
def srcDirs = [
'abc'
]
android {
// 省略...
sourceSets {
main {
res.srcDirs = ['src/main/res']
srcDirs.forEach {
res.srcDirs += 'src/main/java/com/kyaracter/myapplication/' + it + '/res'
}
}
}
}
resフォルダとして認識されると、abcにあるresフォルダの見た目がリソースフォルダのものに変わります。
![Screen Shot 2018-05-27 at 18.12.36.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F9665%2F0939531e-0485-e218-5549-fd4ae29106c6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=53bcf68fe59a3bfffbd5fdc1ce82ffb7)
使いみち
valuesだけでなく、layoutやmenuも同様に細分化できるので、ファイル数が多すぎて困った場合に使える感じです。
また、 abc/res/values/string.xml に定義する文字列は、この名前空間の外側でも参照できます。