Referencia de atributos de herramientas

Si bien Jetpack Compose controla las herramientas de diseño de la IU directamente en Kotlin, el espacio de nombres tools: sigue siendo esencial para las configuraciones a nivel del proyecto. Los archivos XML estándar de Android, como AndroidManifest.xml y res/raw/keep.xml, usan atributos tools: para administrar las advertencias de Lint y configurar el reductor de recursos.

Cuando compilas tu app, las herramientas de compilación quitan esos atributos para que no haya ningún efecto en el tamaño del APK o en el comportamiento del tiempo de ejecución.

Para usar esos atributos, agrega el espacio de nombres tools al elemento raíz de cada archivo en formato XML donde quieras usarlos, como se muestra a continuación:

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

Atributos de manejo de errores

Los siguientes atributos ayudan a suprimir los mensajes de advertencia de lint:

tools:ignore

Destinado a: Cualquier elemento

Usado por: Lint

Este atributo acepta una lista separada por comas de IDs de problemas de lint que deseas que las herramientas omitan en este elemento o en cualquiera de sus subordinados.

Por ejemplo, puedes indicar a las herramientas que omitan el error MissingTranslation:

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

tools:targetApi

Destinado a: Cualquier elemento

Usado por: Lint

Este atributo funciona como la @TargetApi anotación del código de Java o la @RequiresApi anotación del código de Kotlin. Permite especificar el nivel de API (ya sea como un número entero o como un nombre de código) compatible con este elemento.

Esto indica a las herramientas de lint que crees que este elemento y cualquiera de sus elementos secundarios se usan solo en el nivel de API especificado o en uno posterior. De esta forma, se evita que lint te advierta si ese elemento o sus atributos no están disponibles en el nivel de API que especificas como la minSdkVersion.

Por ejemplo, puedes usar este atributo porque declaras un <service> en tu AndroidManifest.xml que usa un tipo de servicio en primer plano solo disponible en el nivel de API 34 y en niveles posteriores, pero la minSdkVersion de tu proyecto es inferior:

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

tools:locale

Destinado a: <resources>

Usado por: Lint, editor de Android Studio

Esto indica a las herramientas que el idioma o la configuración regional predeterminados son para los recursos del elemento <resources> específico para evitar advertencias del corrector ortográfico. De lo contrario, la herramienta supone que el idioma es el inglés.

El valor debe ser un calificador de configuración regional válido.

Por ejemplo, puedes agregar esto a tu archivo values/strings.xml predeterminado para indicar que el idioma que se usa en las cadenas predeterminadas es el español en lugar del inglés:

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

Atributos de reducción de recursos

Los siguientes atributos permiten habilitar marcas de referencia estrictas y declarar si conservar o descartar ciertos recursos cuando se utiliza la reducción de recursos.

Para habilitar la reducción de recursos, establece la propiedad shrinkResources como true en el archivo build.gradle junto con minifyEnabled para la reducción de código.

Por ejemplo:

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

Destinado a: <resources>

Usado por: Herramientas de compilación con reducción de recursos

Este atributo te permite especificar si las herramientas de compilación deben usar lo siguiente:

  • Modo seguro: Conserva todos los recursos que se citan de forma explícita y que podrían ser referenciados dinámicamente con una llamada a Resources.getIdentifier().
  • Modo estricto: Conserva solo los recursos que se citan de forma explícita en el código o en otros recursos.

El valor predeterminado es usar el modo seguro (shrinkMode="safe"). Para utilizar el modo estricto, agrega shrinkMode="strict" a la etiqueta <resources>, como se muestra a continuación:

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

Si habilitas el modo estricto, es posible que debas usar tools:keep para conservar los recursos que se quitaron, pero que en realidad quieres conservar, y tools:discard para quitar de forma explícita aún más recursos.

Para obtener más información, consulta Cómo reducir recursos.

tools:keep

Destinado a: <resources>

Usado por: Herramientas de compilación con reducción de recursos

Cuando se utiliza la reducción de recursos para quitar recursos no utilizados, este atributo permite especificar los que se deben conservar (en general, porque se les hace referencia de manera indirecta durante el tiempo de ejecución, como cuando se envía un nombre de recurso generado de forma dinámica a Resources.getIdentifier()).

Para usar, crea un archivo en formato XML en el directorio de recursos (por ejemplo, res/raw/keep.xml) con una etiqueta <resources>y especifica cada recurso que quieras conservar en el atributo tools:keepcomo una lista separada por comas. Puedes usar el carácter de asterisco como comodín.

Por ejemplo:

<?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" />

Para obtener más información, consulta Cómo reducir recursos.

tools:discard

Destinado a: <resources>

Usado por: Herramientas de compilación con reducción de recursos

Cuando se utiliza la reducción de recursos para quitar recursos no utilizados, este atributo permite especificar los que quieres descartar de forma manual (en general, porque se les hace referencia, pero de una manera que no afecta la app, o porque el complemento Gradle dedujo de forma incorrecta que se hace referencia al recurso).

Para usar este atributo, crea un archivo en formato XML en el directorio de recursos (por ejemplo, res/raw/keep.xml) con la etiqueta <resources>y especifica cada recurso que quieras descartar en el atributo tools:discard, en una lista separada por comas. Puedes usar el carácter de asterisco como comodín.

Por ejemplo:

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

Para obtener más información, consulta Cómo reducir recursos.

Recursos adicionales

Contenido de Views