The Android Developer Challenge is back! Submit your idea before December 2.

앱 리소스 추가

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

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

특정 리소스 유형을 생성하는 방법에 관한 자세한 내용은 다음 페이지를 참조해야 합니다.

앱 코드에서 리소스를 참조하는 방법에 관한 정보는 리소스 제공을 참조하세요.

XML 리소스 파일 추가

위의 링크된 페이지에서 각 리소스 유형에 맞게 맞춤설정된 워크플로를 설명하고 있지만, 아래 단계를 따라 어떤 XML 리소스 파일이든 추가할 수 있습니다.

  1. Project 창(Android 또는 Project 뷰에 있을 때)에서 타겟 앱 모듈을 클릭하고 File > New > Android resource file을 선택합니다.

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

팁: res 폴더에 있는 기존의 리소스 디렉터리를 마우스 오른쪽 버튼으로 클릭하고 New > type-name resource file을 선택합니다. 그러면 원하는 리소스 유형에 해당하는 New Resource File 대화상자의 간소화된 버전이 열립니다.

팁: 일부 복잡한 리소스는 다중 XML 리소스 파일이 필요합니다. 예를 들어, 애니메이션 벡터 드로어블에는 벡터 드로어블 객체와 애니메이션 객체가 있으므로 XML 파일이 최소한 세 개 필요합니다. 이러한 객체 중 하나 이상을 재사용해야 한다면 XML 파일 세 개를 별도로 유지하면 됩니다. 그러나, XML 파일이 하나의 애니메이션 벡터 드로어블에만 사용된다면 대신 Android 애셋 패키징 도구(AAPT)에서 제공되는 인라인 리소스 형식을 사용하면 됩니다. AAPT를 사용하여 하나의 XML 파일에 리소스 세 개를 모두 정의할 수 있습니다. 자세한 정보는 복잡한 XML 리소스 인라인 처리를 참조하세요.

리소스 디렉터리 추가

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

  1. Project 창에서 타겟 앱 모듈을 클릭한 후 File > New > Android resource directory를 선택합니다.

  2. 대화상자에 세부정보를 채웁니다.
    • Directory name: 디렉터리 이름은 반드시 리소스 유형 및 구성 한정자의 조합에 해당하는 방식으로 지정해야 합니다. 따라서, 구성 한정자를 디렉터리 이름에 직접 추가하려는 경우가 아니면 이 값을 편집해서는 안 됩니다(대신 Available qualifiers 사용).
    • Resource type: 만들고 싶은 리소스 유형을 선택합니다.
    • Source set: 레이아웃을 사용하려는 소스 세트를 선택합니다.
    • Available qualifiers: 레이아웃 디렉터리의 구성 한정자를 입력하는 대신 왼쪽에 있는 목록에서 한정자를 클릭한 후에 Add 를 클릭하여 한정자를 추가할 수 있습니다.
  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']
            }
        }
    }
    

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

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

자세한 정보는 소스 세트를 참조하세요.

리소스 병합

최종 APK 파일에는 세 가지 소스에서 가져온 리소스가 포함될 수 있습니다.

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

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

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

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

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

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

  • res/layout/foo.xml

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

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