Android Gradle Pluginにおけるresとresourcesフォルダ

Android Gradle Pluginでは、sourceSetsとして以下のようなものが指定できる。

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

ディレクトリ構造を変えたくて上記を変更しようとしたとき、上記のうちresresourcesは何が違うのか?という点がすぐには分からなかったのでメモ。
Gradle Plugin User Guide には以下のように書いてある。

To replace the default source folders, you will want to use srcDirs
instead, which takes an array of path. This also shows a different way
of using the objects involved:

sourceSets {
    main.java.srcDirs = ['src/java']
    main.resources.srcDirs = ['src/resources']
}

For more information, see the Gradle documentation on the Java plugin
here.

sourceSetsで設定できるものはすべてAndroidプラグイン独自のものなのではなくJavaプラグイン由来のものとAndroid独自のものがある。
つまり、resources.srcDirsはJavaでいうリソースなので.propertiesファイルなどを配置するディレクトリのこと。

なので、Androidでいうリソースファイル(resフォルダ以下のXMLなど)の配置はsourceSets.main.res.srcDirsで設定するのが正しい。

© 2010 ksoichiro