앱 리소스 추가

비트맵 및 레이아웃 같은 앱 리소스는 각 모듈의 res/ 디렉터리 내에 유형별 디렉터리로 구성됩니다. 또한, 다른 기기 설정(예: 고밀도 화면용 비트맵의 고해상도 버전)에 최적화된 각 파일의 대체 버전을 추가할 수 있습니다.

Android 스튜디오를 사용하면 추가하고 싶은 리소스 유형에 따라 여러 가지 방법으로 새 리소스와 대체 리소스를 추가할 수 있습니다. 이 페이지에서는 기본 리소스 파일을 추가하는 방법, 리소스의 위치를 변경하는 방법 및 리소스 병합이 작동하는 방식에 관해 설명합니다.

특정 리소스 유형을 만드는 방법에 관한 자세한 내용은 다음 페이지를 참고하세요.

앱 코드에서 리소스를 참조하는 방법에 관한 자세한 내용은 앱 리소스 개요를 참고하세요.

XML 리소스 파일 추가

앞선 페이지 링크는 각 리소스 유형에 맞춤설정된 워크플로를 설명하지만, 다음 단계를 따르면 모든 XML 리소스 파일을 추가할 수 있습니다.

  1. Android 또는 Project 뷰의 Project 창에서 타겟 앱 모듈을 클릭합니다.

  2. File > New > Android resource file을 선택합니다.

    그림 1. New Resource File 대화상자

  3. 대화상자에 세부정보를 작성합니다.
    • File name: XML 파일의 이름을 입력합니다(.xml 접미사는 필요하지 않음).
    • Resource type: 만들고 싶은 리소스 유형을 선택합니다.
    • Root element: 해당하는 경우 파일의 루트 XML 요소를 선택합니다. 일부 리소스 유형은 한 가지 유형의 루트 요소만 지원합니다. 선택한 리소스 유형에 따라 편집이 불가능할 수도 있습니다.
    • Source set: 파일을 저장하려고 하는 소스 세트를 선택합니다.
    • Directory name: 디렉터리 이름은 반드시 리소스 유형과 구성 한정자에 해당하는 방식으로 지정해야 합니다. 디렉터리 이름에 구성 한정자를 직접 추가하지 않는 한 이 값을 수정하면 안 됩니다(대신 Available qualifiers를 사용).
    • Available qualifiers: 디렉터리 이름에 구성 한정자를 직접 입력하는 대신 Add 를 클릭하여 목록에서 한정자를 선택하는 방식으로 추가할 수 있습니다.
  4. 원하는 한정자를 모두 추가한 후 OK를 클릭합니다.

도움말: 추가할 리소스 유형에 해당하는 New Resource File 대화상자의 간소화된 버전을 열려면 res 폴더 내에서 기존 리소스 디렉터리를 마우스 오른쪽 버튼으로 클릭하고 New > type-name resource file을 선택합니다.

인라인 복합 XML 리소스

일부 복잡한 리소스는 다중 XML 리소스 파일이 필요합니다. 예를 들어, 애니메이션 벡터 드로어블에는 벡터 드로어블 객체와 애니메이션 객체가 있고 최소 3개의 XML 파일이 필요합니다.

이 예에서는 하나 이상의 XML 파일을 재사용해야 하는 경우 세 개의 개별 XML 파일을 만들고 유지할 수 있습니다. 그러나 XML 파일이 이 애니메이션 벡터 드로어블에만 사용된다면 대신 Android Asset Packaging Tool(AAPT)에서 제공되는 인라인 리소스 형식을 사용하면 됩니다. AAPT를 사용하여 하나의 XML 파일에 리소스 세 개를 모두 정의할 수 있습니다. 자세한 정보는 인라인 복합 XML 리소스를 참고하세요.

리소스 디렉터리 추가

새 리소스 디렉터리를 추가하려면 다음 단계를 따르세요.

  1. Project 창에서 타겟 앱 모듈을 클릭합니다.

  2. File > New > Android resource directory를 선택합니다.

    그림 2. New Resource Directory 대화상자

  3. 대화상자에 세부정보를 채웁니다.
    • Directory name: 디렉터리 이름은 반드시 리소스 유형 및 구성 한정자의 조합에 해당하는 방식으로 지정해야 합니다. 디렉터리 이름에 구성 한정자를 직접 추가하지 않는 한 이 값을 수정하면 안 됩니다(대신 Available qualifiers를 사용).
    • Resource type: 디렉터리에 포함하려는 리소스 유형을 선택합니다.
    • Source set: 디렉터리를 사용하려는 소스 세트를 선택합니다.
    • Available qualifiers: 디렉터리 이름에 구성 한정자를 직접 입력하는 대신 Add 를 클릭하여 목록에서 한정자를 선택하는 방식으로 추가할 수 있습니다.
  4. 원하는 한정자를 모두 추가한 후 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.srcDirs("resources/main")
        }
        getByName("debug") {
            res.srcDirs("resources/debug")
        }
    }
}

또한 하나의 소스 세트에 여러 개의 리소스 디렉터리를 지정할 수 있으며 빌드 도구는 디렉터리를 함께 병합합니다. 예:

Groovy

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

Kotlin

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

자세한 내용은 소스 세트를 참고하세요.

리소스 병합

최종 앱 파일의 리소스는 다음 세 가지 소스에서 가져올 수 있습니다.

  • 기본 소스 세트(일반적으로 src/main/res/에 위치함)
  • 빌드 변형 소스 세트
  • Android 라이브러리(AAR)

각 소스 세트 또는 라이브러리의 모든 리소스가 고유하면 최종 앱에 모두 추가됩니다. 리소스 유형 디렉터리와 리소스 한정자(정의된 경우) 모두에서 파일 이름이 고유하면 리소스를 고유한 것으로 간주합니다.

동일한 리소스에 일치하는 버전이 둘 이상 존재하면 하나의 버전만 최종 앱에 포함됩니다. 빌드 도구에서는 다음의 우선순위에 따라 유지할 버전을 선택합니다(왼쪽이 우선순위가 가장 높음).

빌드 변형 > 빌드 유형 > 제품 버전 > 기본 소스 세트 > 라이브러리 종속 항목

예를 들어, 기본 소스 세트가 다음을 포함합니다.

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

그리고 디버그 빌드 유형이 다음을 포함합니다.

  • res/layout/example.xml

그러면 최종 앱에는 디버그 빌드 유형의 res/layout/example.xml과 기본 소스 세트의 res/layout-land/example.xml이 포함됩니다.

그러나 빌드 구성이 특정 소스 세트에 다중 리소스 폴더를 지정하고 이 소스 사이에 충돌이 있는 경우 각 리소스 디렉터리의 우선순위가 동일하기 때문에 오류가 발생하고 병합에 실패합니다.