Хотя Jetpack Compose напрямую управляет инструментами проектирования пользовательского интерфейса в Kotlin, пространство имен tools: по-прежнему имеет важное значение для конфигураций на уровне проекта. Стандартные XML-файлы Android, такие как AndroidManifest.xml и res/raw/keep.xml , используют атрибуты tools: для обработки предупреждений Lint и настройки механизма сжатия ресурсов.
При сборке приложения инструменты сборки удаляют эти атрибуты, чтобы они не влияли на размер APK-файла или поведение во время выполнения.
Чтобы использовать эти атрибуты, добавьте пространство имен tools к корневому элементу каждого XML-файла, где вы хотите их использовать, как показано здесь:
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
Атрибуты обработки ошибок
Следующие атрибуты помогают подавлять предупреждающие сообщения от линтера:
tools:ignore
Предназначено для: любого элемента
Используется: Lint
Этот атрибут принимает список идентификаторов проблем линтинга, разделенных запятыми, которые вы хотите, чтобы инструменты игнорировали для этого элемента или любого из его потомков.
Например, вы можете указать инструментам игнорировать ошибку MissingTranslation :
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
Предназначено для : любого элемента
Используется : Lint
Этот атрибут работает аналогично аннотации @TargetApi в Java-коде или аннотации @RequiresApi в Kotlin-коде. Он позволяет указать уровень API (в виде целого числа или кодового имени), поддерживающий этот элемент.
Это сообщает инструментам проверки кода, что вы считаете, что этот элемент и любые его дочерние элементы используются только на указанном уровне API или выше. Это предотвращает предупреждения со стороны инструмента проверки кода, если этот элемент или его атрибуты недоступны на уровне API, указанном вами в качестве minSdkVersion .
Например, вы можете использовать этот атрибут, потому что объявляете <service> в файле AndroidManifest.xml , который использует тип службы переднего плана, доступный только в API уровня 34 и выше, но minSdkVersion в вашем проекте ниже:
<service
android:name=".playback.MediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="34" />
tools:locale
Предназначено для: <resources>
Используется: Lint, редактором Android Studio
Это указывает инструментам, какой язык или локаль по умолчанию используется для ресурсов в данном элементе <resources> , чтобы избежать предупреждений от проверки орфографии. В противном случае инструмент предполагает, что язык — английский.
Значение должно быть допустимым квалификатором локали .
Например, вы можете добавить это в файл default values/strings.xml чтобы указать, что для строк по умолчанию используется испанский, а не английский язык:
<resources xmlns:tools="http://schemas.android.com/tools"
tools:locale="es">
Характеристики сокращения ресурсов
Следующие атрибуты позволяют включить строгие проверки ссылок и указать, следует ли сохранять или удалять определенные ресурсы при использовании сжатия ресурсов .
Чтобы включить сжатие ресурсов, установите свойство shrinkResources в true в файле build.gradle , а также minifyEnabled для сжатия кода.
Например:
Классный
android { ... buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
Котлин
android { ... buildTypes { getByName("release") { isShrinkResources = true isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) } } }
tools:shrinkMode
Предназначено для: <resources>
Используется для: создания инструментов с ограничением потребления ресурсов.
Этот атрибут позволяет указать, следует ли инструментам сборки использовать следующие параметры:
- Безопасный режим: Сохраняйте все ресурсы, на которые явно ссылаются и которые могут динамически использоваться при вызове метода
Resources.getIdentifier(). - Строгий режим: сохранять только те ресурсы, на которые явно ссылаются в коде или других источниках.
По умолчанию используется безопасный режим ( shrinkMode="safe" ). Чтобы использовать строгий режим, добавьте shrinkMode="strict" к тегу <resources> , как показано здесь:
<?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() .
Для использования создайте XML-файл в каталоге ресурсов (например, res/raw/keep.xml ) с тегом <resources> и укажите каждый ресурс, который нужно сохранить, в атрибуте 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 неправильно определил, что на ресурс есть ссылка.
Для использования создайте XML-файл в каталоге ресурсов (например, res/raw/keep.xml ) с тегом <resources> и укажите каждый ресурс, который нужно удалить, в атрибуте tools:discard в виде списка, разделенного запятыми. В качестве подстановочного знака можно использовать звездочку.
Например:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="@layout/unused_1" />
Для получения более подробной информации см. раздел «Сокращение ресурсов» .