6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

アプリのリソースの追加

ビットマップやレイアウトといったアプリリソースは、各モジュールの 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 ファイルを基準とした)任意の場所に変更できます。次に例を示します。

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

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

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 が含まれます。

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