Add app resources
App resources such as bitmaps and layouts are organized into type-specificdirectories inside each module's res/
directory. You can also add alternativeversions of each file that are optimized for different deviceconfigurations (such as a high-res version of a bitmap for high-densityscreens).
Android Studio helps you add new resources and alternative resources in severalways, depending on the type of resource you want to add. This page describes howto add basic resource files, how to change the location of your resources, andhow resource merging works.
You should also see the following pages for details about how to createspecific resource types:
- To add layout files, see Build a UI with Layout Editor.
- To add string files, see Localize the UI with Translations Editor.
- To add bitmaps, see Create app icons with Image Asset Studio.
- To add SVG files, see Add multi-density vector graphics.
For information about how to reference the resources from your appcode, seeProviding resources.
Add an XML resource file
Although the pages linked above describe workflows that are customized to eachtype of resource, you can add any XML resource file by following thesesteps:
- Click the target app module in the Project window (while in eitherthe Android or Project view), and then select File > New >Android resource file.
- Fill in the details in the dialog:
- File name: Type the name for the XML file (does not require the
.xml
suffix). - Resource type: Select the type of resource you want to create.
- Root element: If applicable, select the root XML element for thefile. Some resource types support only one type of root element, sodepending on the type selected above, this might not be editable.
- Source set: Select the source set where you want to save the file.
- Directory name: The directory must be named in a way that's specificto the resource type and configuration qualifiers. So you shouldnot edit this unless you want to add configuration qualifiers to thedirectory name by hand (see Available qualifiers instead).
- Available qualifiers: Instead of typing configuration qualifiers foryour layout directory, you can add them by clicking a qualifier from thelist on the left, and then clicking Add.
- File name: Type the name for the XML file (does not require the
- Once you've added all the qualifiers you want, click OK.
Tip: Right-click an existing resource directory within theres folder and select New > type-name resource file.This opens a simplified version of the New Resource File dialog that'sspecific to your desired resource type.
Tip:Some complex resources require multiple XML resource files. For example, ananimated vector drawable has a vector drawable object and an animation object,which requires at least three XML files.You can keep the three separate XML files if you need to reuse one or more ofthem. But, if the XML files are used only for this one animated vector drawable,you can instead use the inline resource format provided in the Android AssetPackaging Tool (AAPT). With AAPT, you can define all three resources in one XMLfile. For more information, seeInline Complex XML Resources.
Add a resource directory
If you need to add a new resource directory, follow these steps:
- Click the target app module in the Project window, and then selectFile > New > Android resource directory.
- Fill in the details in the dialog:
- Directory name: The directory must be named in a way that's specificto the resource type and combination of configuration qualifiers. So youshould not edit this unless you want to add configuration qualifiers to thedirectory name by hand (use Available qualifiers instead).
- Resource type: Select the type of resource you want to create.
- Source set: Select the source set where you want the layout.
- Available qualifiers: Instead of typing configuration qualifiers foryour layout directory, you can add them by clicking a qualifier from thelist on the left, and then clicking Add.
- Once you've added all the qualifiers you want, click OK.
Change your resource directory
By default, your resources are located inmodule-name/src/source-set-name/res/
.For example, resources for your module's main source set are in src/main/res/
and resources for the debug source set are in src/debug/res/
.
However, you can change these paths to any otherlocation (relative to the build.gradle
file) with the res.srcDirs
propertyin the sourceSets {}
block. For example:
android {
sourceSets {
main {
res.srcDirs = ['resources/main']
}
debug {
res.srcDirs = ['resources/debug']
}
}
}
You can also specify multiple resource directories for one source set, and thenthe build tools will merge them together. For example:
android {
sourceSets {
main {
res.srcDirs = ['res1', 'res2']
}
}
}
Note: If two or more resource directories contain the same resource file, anerror occurs during resource merging.
For more information, read aboutsource sets.
Resource merging
Resources in your final APK file may come from 3 different sources:
- The main source set (generally located in
src/main/res/
) - Build variant source sets
- Android libraries (AARs)
When all resources from each source set or library are unique, they're alladded into the final APK. A resource is considered unique if it's file name isunique within both itsresource type directoryand theresource qualifier(if defined).
If there exist two or more matching versions of the same resource,then only one version is included in the final APK. The build tools selectwhich version to keep based on the following priority order (highest priorityon the left):
build variant > build type > product flavor > main source set > library dependencies
For example, if the main source set contains:
res/layout/foo.xml
res/layout-land/foo.xml
And the debug build type contains:res/layout/foo.xml
Then the final APK includesres/layout/foo.xml
from the debug build type andres/layout-land/foo.xml
from the main source set.
However, if your build configuration specifiesmultiple resource folders fora given source set and there are conflicts between those sources, an erroroccurs and the merge fails because each resource directory has the samepriority.