Multiple resource folders in Android

Multiple resource folders in Android

Android resource organization system is controversial.

It sets clear boundaries between code and resources, such as images or layouts. But on the other hand, these 2 are closely related in some cases, especially the Activities/Fragments with their layouts.

And having those so far apart makes it hard, especially in large projects. When you are working on a class and you want to create a helper class, you place those 2 close together (usually in the same package) because they share the same "context". But you cannot do the same with resource files, because only a single resource folder exists and everything must be placed there.

Actually, there is a way to have multiple resource folders in an Android project. You just need to declare them in your module's build.gradle file.

android {
    [...]
    sourceSets {
        main.res.srcDirs += [
                'src/main/java/your/package/name/res',
                [...]
        ]
    }
}
build.gradle (Module)

You can have as many as you want. Just add a new line for each new resource folder. In the defined root res folders you can have multiple subfolders depending on the type of resources you have (e.g. only having res/layout if you only have layouts).

In the above example, we are appending (+=) the new resource folders to the existing main one. You can remove the main one by just setting ( =) instead.

The main use-case I use this approach is to have all the relevant resources for a screen close together. So each screen has its own package, and for each screen package a dedicated resource folder.

I hope I made your Android development life a bit easier!

Show Comments