비트맵 및 레이아웃 같은 앱 리소스는 각 모듈의 res/
디렉터리 내에 유형별 디렉터리로 구성됩니다. 또한, 다른 기기 설정(예: 고밀도 화면용 비트맵의 고해상도 버전)에 최적화된 각 파일의 대체 버전을 추가할 수 있습니다.
Android 스튜디오를 사용하면 추가하고 싶은 리소스 유형에 따라 여러 가지 방법으로 새 리소스와 대체 리소스를 추가할 수 있습니다. 이 페이지에서는 기본 리소스 파일을 추가하는 방법, 리소스의 위치를 변경하는 방법 및 리소스 병합이 작동하는 방식에 관해 설명합니다.
또한 다음 페이지에서 특정 리소스 유형을 생성하는 방법에 관한 자세한 내용을 확인해야 합니다.
- 레이아웃 파일을 추가하려면 Layout Editor로 UI 빌드를 참고하세요.
- 문자열 파일을 추가하려면 Translations Editor로 UI 현지화를 참고하세요.
- 비트맵을 추가하려면 Image Asset Studio로 앱 아이콘 생성을 참고하세요.
- SVG 파일을 추가하려면 다중 밀도 벡터 그래픽 추가를 참고하세요.
앱 코드에서 리소스를 참조하는 방법에 관한 정보는 리소스 제공을 참고하세요.
XML 리소스 파일 추가
위의 링크된 페이지에서 각 리소스 유형에 맞게 맞춤설정된 워크플로를 설명하고 있지만, 아래 단계를 따라 어떤 XML 리소스 파일이든 추가할 수 있습니다.
Project 창(Android 또는 Project 뷰에 있을 때)에서 타겟 앱 모듈을 클릭하고 File > New > Android resource file을 선택합니다.
- 대화상자에 세부정보를 채웁니다.
- File name: XML 파일의 이름을 입력합니다(
.xml
확장자는 필요하지 않음). - Resource type: 만들고 싶은 리소스 유형을 선택합니다.
- Root element: 해당하는 경우 파일의 루트 XML 요소를 선택합니다. 일부 리소스 유형은 루트 요소의 한 가지 유형만 지원하므로 위에서 선택한 유형에 따라 이 값은 편집하지 못할 수 있습니다.
- Source set: 파일을 저장하려고 하는 소스 세트를 선택합니다.
- Directory name: 디렉터리 이름은 반드시 리소스 유형과 구성 한정자에 해당하는 방식으로 지정해야 합니다. 따라서 구성 한정자를 디렉터리 이름에 직접 추가하려는 경우가 아니면 이 값을 편집해서는 안 됩니다(대신 Available qualifiers 참조).
- Available qualifiers: 레이아웃 디렉터리의 구성 한정자를 입력하는 대신 왼쪽에 있는 목록에서 한정자를 클릭한 후에 Add
를 클릭하여 한정자를 추가할 수 있습니다.
- File name: XML 파일의 이름을 입력합니다(
- 원하는 한정자를 모두 추가한 후 OK를 클릭합니다.
팁: res 폴더에 있는 기존 리소스 디렉터리를 마우스 오른쪽 버튼으로 클릭하고 New > type-name resource file을 선택합니다. 그러면 원하는 리소스 유형에 해당하는 New Resource File 대화상자의 간소화된 버전이 열립니다.
팁: 일부 복잡한 리소스는 다중 XML 리소스 파일이 필요합니다. 예를 들어, 애니메이션 벡터 드로어블에는 벡터 드로어블 객체와 애니메이션 객체가 있으므로 XML 파일이 최소한 세 개 필요합니다. 이러한 객체 중 하나 이상을 재사용해야 한다면 XML 파일 세 개를 별도로 유지하면 됩니다. 그러나 XML 파일이 하나의 애니메이션 벡터 드로어블에만 사용된다면 대신 Android Asset Packaging Tool(AAPT)에서 제공되는 인라인 리소스 형식을 사용하면 됩니다. AAPT를 사용하여 하나의 XML 파일에 리소스 세 개를 모두 정의할 수 있습니다. 자세한 정보는 복잡한 XML 리소스 인라인 처리를 참조하세요.
리소스 디렉터리 추가
새 리소스 디렉터리를 추가하려면 다음 단계를 따르세요.
Project 창에서 타겟 앱 모듈을 클릭한 후 File > New > Android resource directory를 선택합니다.
- 대화상자에 세부정보를 채웁니다.
- Directory name: 디렉터리 이름은 반드시 리소스 유형 및 구성 한정자의 조합에 해당하는 방식으로 지정해야 합니다. 따라서 구성 한정자를 디렉터리 이름에 직접 추가하려는 경우가 아니면 이 값을 편집해서는 안 됩니다(대신 Available qualifiers 사용).
- Resource type: 만들고 싶은 리소스 유형을 선택합니다.
- Source set: 레이아웃을 사용하려는 소스 세트를 선택합니다.
- Available qualifiers: 레이아웃 디렉터리의 구성 한정자를 입력하는 대신 왼쪽에 있는 목록에서 한정자를 클릭한 후에 Add
를 클릭하여 한정자를 추가할 수 있습니다.
- 원하는 한정자를 모두 추가한 후 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 파일에는 세 가지 소스에서 가져온 리소스가 포함될 수 있습니다.
- 기본 소스 세트(일반적으로
src/main/res/
에 위치함) - 빌드 변형 소스 세트
- Android 라이브러리(AAR)
각 소스 세트 또는 라이브러리의 모든 리소스가 고유한 경우 모든 리소스가 최종 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
이 포함됩니다.
그러나 빌드 구성이 어떤 소스 세트에 다중 리소스 폴더를 지정하고 이 소스 사이에 충돌이 있는 경우 각 리소스 디렉터리의 우선순위가 동일하기 때문에 오류가 발생하고 병합은 실패합니다.