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" />
자세한 내용은 리소스 축소를 참조하세요.