도구 속성 참조

Jetpack Compose는 Kotlin에서 직접 UI 디자인 타임 도구를 처리하지만 tools: 네임스페이스는 여전히 프로젝트 수준 구성에 필수적입니다. AndroidManifest.xml, res/raw/keep.xml과 같은 표준 Android XML 파일은 tools: 속성을 사용하여 린트 경고를 관리하고 리소스 축소기를 구성합니다.

앱을 빌드할 때 빌드 도구는 이러한 속성을 삭제하므로 APK 크기 또는 런타임 동작에 영향을 미치지 않습니다.

이러한 속성을 사용하려면 아래와 같이 속성을 사용할 각 XML 파일의 루트 요소에 tools 네임스페이스를 추가합니다.

<RootTag xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" >

오류 처리 속성

다음 속성을 사용하면 린트 경고 메시지를 숨길 수 있습니다.

tools:ignore

사용 대상: 모든 요소

사용 주체: 린트

이 속성은 도구에서 이 요소 또는 그 하위 요소에 관해 무시할 린트 문제 ID를 쉼표로 구분된 목록 형식으로 허용합니다.

예를 들어, 도구가 MissingTranslation 오류를 무시하도록 할 수 있습니다.

<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>

tools:targetApi

사용 대상: 모든 요소

사용 주체: 린트

이 속성은 Java 코드의 @TargetApi 주석 또는 Kotlin 코드의 @RequiresApi 주석과 동일하게 작동합니다. 이 속성을 사용하면 이 요소를 지원하는 API 수준을 정수 또는 코드명으로 지정할 수 있습니다.

이 속성은 이 요소와 모든 하위 요소가 특정 API 수준 이상에서만 사용된다고 린트 도구에 알립니다. 이 속성을 사용하면 minSdkVersion으로 지정한 API 수준에서 관련 요소 또는 요소의 속성을 사용할 수 없는 경우에 발생하는 린트 경고가 중단됩니다.

예를 들어 API 수준 34 이상에서만 사용할 수 있는 포그라운드 서비스 유형을 사용하는 AndroidManifest.xml에서 <service>를 선언하지만 프로젝트의 minSdkVersion이 더 낮은 경우 이 속성을 사용할 수 있습니다.

<service
    android:name=".playback.MediaPlaybackService"
    android:foregroundServiceType="mediaPlayback"
    xmlns:tools="http://schemas.android.com/tools"
    tools:targetApi="34" />

tools:locale

사용 대상: <resources>

사용 주체: 린트, Android 스튜디오 편집기

이 속성을 사용하면 특정 <resources> 요소의 리소스에 사용되는 기본 언어를 도구에서 알 수 있어 맞춤법 검사기의 경고를 피할 수 있습니다. 이 속성을 사용하지 않으면 도구는 기본 언어가 영어라고 가정합니다.

속성값은 유효한 언어 한정자여야 합니다.

예를 들어 기본 values/strings.xml 파일에 다음을 추가하여 기본 문자열에 사용되는 언어가 영어가 아닌 스페인어임을 나타낼 수 있습니다.

<resources xmlns:tools="http://schemas.android.com/tools"
    tools:locale="es">

리소스 축소 속성

다음 속성을 사용하면 리소스 축소를 사용할 때 엄격한 참조 검사를 사용할 수 있고 특정 리소스의 유지 또는 삭제 여부를 선언할 수 있습니다.

리소스 축소를 사용하려면 build.gradle 파일에서 shrinkResources 속성을 true로 설정합니다(코드 축소의 경우 minifyEnabled도 설정).

예:

Groovy

android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}

Kotlin

android {
    ...
    buildTypes {
        getByName("release") {
            isShrinkResources = true
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

tools:shrinkMode

사용 대상: <resources>

사용 주체: 리소스 축소를 사용하는 빌드 도구

이 속성을 사용하면 빌드 도구에서 다음 모드를 사용해야 하는지 지정할 수 있습니다.

  • 안전 모드: 명시적으로 인용되고 Resources.getIdentifier()를 호출하여 동적으로 참조될 수 있는 모든 리소스를 유지합니다.
  • 엄격 모드: 코드나 다른 리소스에서 명시적으로 인용된 리소스만 유지합니다.

기본값은 안전 모드(shrinkMode="safe")를 사용하는 것입니다. 엄격 모드를 사용하려면 아래와 같이 <resources> 태그에 shrinkMode="strict"를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:shrinkMode="strict" />

엄격 모드를 사용 설정하는 경우 삭제됐지만 실제로 사용하고 싶은 리소스를 유지하기 위해 tools:keep을, 명시적으로 더 많은 리소스를 삭제하기 위해 tools:discard를 사용해야 할 수도 있습니다.

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

tools:keep

사용 대상: <resources>

사용 주체: 리소스 축소를 사용하는 빌드 도구

리소스 축소를 사용하여 사용하지 않는 리소스를 삭제하는 경우 이 속성을 사용하면 유지할 리소스를 지정할 수 있습니다. 일반적으로 이러한 리소스는 동적으로 생성된 리소스 이름을 Resources.getIdentifier()에 전달하는 등의 방식으로 런타임에 간접적으로 참조되기 때문입니다.

이 속성을 사용하려면 <resources> 태그가 있는 리소스 디렉터리(예: res/raw/keep.xml)에 XML 파일을 만들고 유지할 각 리소스를 tools:keep 속성에 쉼표로 구분된 목록 형식으로 지정합니다. 별표 문자를 와일드카드로 사용할 수 있습니다.

예를 들면 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@layout/used_1,@layout/used_2,@layout/*_3" />

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

tools:discard

사용 대상: <resources>

사용 주체: 리소스 축소를 사용하는 빌드 도구

리소스 축소를 사용하여 사용하지 않는 리소스를 삭제하는 경우 이 속성을 사용하면 수동으로 삭제할 리소스를 지정할 수 있습니다. 일반적으로 이러한 리소스가 참조되지만 앱에 영향을 미치지는 않거나, 이 리소스가 참조된다고 Gradle 플러그인에서 잘못 추론했기 때문입니다.

이 속성을 사용하려면 <resources> 태그가 있는 리소스 디렉터리(예: res/raw/keep.xml)에 XML 파일을 만들고 삭제할 각 리소스를 tools:discard 속성에 쉼표로 구분된 목록 형식으로 지정합니다. 별표 문자를 와일드카드로 사용할 수 있습니다.

예를 들면 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:discard="@layout/unused_1" />

자세한 내용은 리소스 축소를 참조하세요.

추가 리소스

콘텐츠 보기