アプリのリソースの追加

ビットマップやレイアウトなどのアプリリソースは、各モジュールの res/ ディレクトリ内にあるタイプ別のディレクトリに配置されます。各リソース ファイルについて、異なるデバイス構成用に最適化した代替バージョン(高密度画面向けの高解像度バージョンのビットマップなど)を追加することもできます。

Android Studio では、追加するリソースのタイプに応じて、さまざまな方法で新しいリソースと代替バージョンのリソースを追加できます。このページでは、基本的なリソース ファイルの追加方法、リソースの場所の変更方法、リソースのマージの仕組みについて説明します。

特定のリソースタイプを作成する方法については、以下のページもご覧ください。

アプリコードからリソースを参照する方法については、リソースを提供するをご覧ください。

XML リソース ファイルを追加する

上記のリンク先のページでは、各リソースタイプ用にカスタマイズされたワークフローについて説明していますが、次の手順に従って、任意のタイプの XML リソース ファイルを追加することもできます。

  1. [Project] ウィンドウ([Android] または [Project] ビュー)で対象のアプリ モジュールをクリックし、次に [File] > [New] > [Android resource file] を選択します。

  2. ダイアログに詳細を入力します。
    • File name: XML ファイルの名前を入力します(.xml 接尾辞は不要です)。
    • Resource type: 作成するリソースのタイプを選択します。
    • Root element: 必要に応じて、ファイルのルート XML 要素を選択します。一部のリソースタイプはサポートするルート要素のタイプが 1 つしかないため、そのようなタイプを選択した場合は編集できません。
    • Source set: ファイルを保存するソースセットを選択します。
    • Directory name: ディレクトリには、リソースタイプと構成修飾子において固有の名前を付ける必要があります。したがって、手動でディレクトリ名に構成修飾子を追加する場合を除き、この項目は編集しないでください(代わりに、Available qualifiers で構成修飾子を追加できます)。
    • Available qualifiers: レイアウト ディレクトリの構成修飾子を入力する代わりに、左側のリストにある修飾子をクリックして追加アイコン をクリックすることで、修飾子を追加できます。
  3. 必要な修飾子をすべて追加したら、[OK] をクリックします。

ヒント: res フォルダ内の既存のリソース ディレクトリを右クリックして、[New] > [type-name resource file] を選択します。すると、目的のリソースタイプに固有の [New Resource File] ダイアログの簡易バージョンが開きます。

ヒント: 一部の複雑なリソースには、複数の XML リソース ファイルが必要です。たとえば、1 つのアニメーション化されたベクター型ドローアブルには、ベクター型ドローアブル オブジェクトとアニメーション オブジェクトが 1 つずつ含まれるため、少なくとも 3 つの XML ファイルが必要です。1 つ以上の XML ファイルを再利用する必要がある場合は、3 つの個別の XML ファイルを保持できます。ただし、XML ファイルがこの 1 つのアニメーション化されたベクター型ドローアブルにのみ使用される場合は、代わりに Android Asset Packaging Tool(AAPT)のインライン リソース形式を使用できます。AAPT を使用すると、1 つの XML ファイルで 3 つすべてのリソースを定義できます。詳細については、複雑なインライン XML リソースをご覧ください。

リソース ディレクトリを追加する

新しいリソース ディレクトリを追加する必要がある場合は、次の手順に従います。

  1. [Project] ウィンドウで対象のアプリ モジュールをクリックし、[File] > [New] > [Android resource directory] を選択します。

  2. ダイアログに詳細を入力します。
    • Directory name: ディレクトリには、リソースタイプと構成修飾子の組み合わせにおいて固有の名前を付ける必要があります。そのため、手動でディレクトリ名に構成修飾子を追加する場合を除き、この項目は編集しないでください(代わりに、Available qualifiers で構成修飾子を追加できます)。
    • Resource type: 作成するリソースのタイプを選択します。
    • Source set: レイアウトが必要なソースセットを選択します。
    • Available qualifiers: レイアウト ディレクトリの構成修飾子を入力する代わりに、左側のリストにある修飾子をクリックして追加アイコン をクリックすることで、修飾子を追加できます。
  3. 必要な修飾子をすべて追加したら、[OK] をクリックします。

リソース ディレクトリを変更する

デフォルトでは、リソースは module-name/src/source-set-name/res/ にあります。 たとえば、モジュールのメイン ソースセットのリソースは src/main/res/ にあり、デバッグ ソースセットのリソースは src/debug/res/ にあります。

ただし、sourceSets {} ブロックの res.srcDirs プロパティを使用して、これらのパスを任意の場所(build.gradle ファイルからの相対パス)に変更できます。次に例を示します。

Groovy

android {
    sourceSets {
        main {
            res.srcDirs = ['resources/main']
        }
        debug {
            res.srcDirs = ['resources/debug']
        }
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            res.setSrcDirs("resources/main")
        }
        getByName("debug") {
            res.setSrcDirs("resources/debug")
        }
    }
}

1 つのソースセットに複数のリソース ディレクトリを指定することもできます。その場合、それらのリソース ディレクトリはビルドツールによってマージされます。次に例を示します。

Groovy


android {
    sourceSets {
        main {
            res.srcDirs = ['res1', 'res2']
        }
    }
}

Kotlin

android {
    sourceSets {
        main {
            res.srcDirs("res1", "res2")
        }
    }
}

詳細については、ソースセットをご覧ください。

リソースをマージする

最終的な APK ファイルのリソースは、次の 3 つのソースから取得されます。

各ソースセットまたはライブラリのすべてのリソースが一意である場合、それらはすべて最終的な APK に追加されます。リソースのファイル名がリソースタイプ ディレクトリとリソース修飾子(定義されている場合)の両方で一意である場合、リソースは一意と見なされます。

同じリソースの一致するバージョンが複数存在する場合、1 つのバージョンのみが最終的な APK に組み込まれます。ビルドツールは、次の優先順位(左のほうが高い)に基づいて、保持するバージョンを選択します。

ビルド バリアント > ビルドタイプ > プロダクト フレーバー > メイン ソースセット > ライブラリ依存関係

たとえば、メイン ソースセットに以下が含まれており、

  • res/layout/foo.xml
  • res/layout-land/foo.xml

デバッグ ビルドタイプに以下が含まれているとします。

  • res/layout/foo.xml

この場合、最終的な APK には、デバッグ ビルドタイプからの res/layout/foo.xml と、メイン ソースセットからの res/layout-land/foo.xml が組み込まれます。

ただし、ビルド構成で特定のソースセットに対して複数のリソース フォルダが指定されており、それらのソース間に競合がある場合は、各リソース ディレクトリの優先度が同じであるため、エラーが発生してマージが失敗します。