Bien que Jetpack Compose gère les outils de conception d'interface utilisateur directement dans Kotlin, l'espace de noms tools: reste essentiel pour les configurations au niveau du projet. Les fichiers XML Android standards, tels que AndroidManifest.xml et res/raw/keep.xml, utilisent des attributs tools: pour gérer les avertissements Lint et configurer le réducteur de ressources.
Lorsque vous compilez votre application, les outils de compilation suppriment ces attributs de sorte que cela n'ait pas d'incidence sur la taille de votre APK ni sur le comportement lors de l'exécution.
Pour utiliser ces attributs, ajoutez l'espace de noms tools à l'élément racine de chaque fichier XML dans lequel vous souhaitez les utiliser, comme indiqué ci-dessous :
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
Attributs de gestion des exceptions
Les attributs suivants permettent de supprimer les messages d'avertissement lint :
tools:ignore
Destiné à : tous les éléments
Utilisé par : lint
Cet attribut accepte une liste d'ID de problèmes lint séparés par une virgule que les outils doivent ignorer sur cet élément ou sur l'un de ses descendants.
Vous pouvez par exemple indiquer aux outils d'ignorer l'erreur MissingTranslation :
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
Destiné à : tous les éléments
Utilisé par : lint
Cet attribut fonctionne de la même manière que l'annotation @TargetApi dans le code Java
ou l'annotation @RequiresApi dans le code Kotlin. Il vous permet de spécifier le niveau d'API (sous forme d'entier ou de nom de code) prenant en charge cet élément.
Cette action indique aux outils lint que vous pensez que cet élément (et tous ses enfants) ne sera utilisé qu'au niveau d'API spécifié ou à un niveau supérieur. Ainsi, lint ne vous avertit pas si cet élément ou ses attributs ne sont pas disponibles au niveau de l'API que vous spécifiez en tant que votre minSdkVersion.
Vous pouvez par exemple vous servir de cet attribut, car vous déclarez un
<service> dans votre AndroidManifest.xml qui utilise un type de service de premier plan
disponible uniquement à partir du niveau d'API 34, mais le minSdkVersion
de votre projet est inférieur :
<service
android:name=".playback.MediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="34" />
tools:locale
Destiné à <resources>
Utilisé par : lint, éditeur Android Studio
Cet attribut indique aux outils la langue/les paramètres régionaux par défaut des ressources dans l'élément <resources> donné, pour éviter les avertissements du correcteur orthographique.
Sinon, l'outil suppose que la langue est l'anglais.
La valeur doit correspondre à un qualificatif de paramètres régionaux valide.
Vous pouvez par exemple ajouter cet attribut à votre fichier values/strings.xml par défaut pour indiquer que la langue utilisée pour les chaînes par défaut est l'espagnol plutôt que l'anglais :
<resources xmlns:tools="http://schemas.android.com/tools"
tools:locale="es">
Attributs de réduction des ressources
Les attributs suivants vous permettent d'activer des vérifications de référence strictes et de spécifier si vous souhaitez conserver ou supprimer certaines ressources lorsque vous utilisez la réduction des ressources.
Pour activer la réduction des ressources, définissez la propriété shrinkResources sur true dans votre fichier build.gradle (avec minifyEnabled pour la minification du code).
Exemple :
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
Destiné à : <resources>
Utilisé par : outils de compilation avec réduction des ressources
Cet attribut vous permet de spécifier si les outils de compilation doivent utiliser les éléments suivants :
- Mode sans échec : conservez toutes les ressources explicitement mentionnées et qui peuvent être référencées de manière dynamique en appelant
Resources.getIdentifier(). - Mode strict : ne conservez que les ressources explicitement citées dans le code ou dans d'autres ressources.
Le mode sans échec (shrinkMode="safe") est utilisé par défaut. Pour utiliser le mode strict à la place, ajoutez shrinkMode="strict" à la balise <resources>, comme ci-dessous :
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="strict" />
Lorsque vous activez le mode strict, vous devrez peut-être utiliser tools:keep pour conserver les ressources qui ont été supprimées, mais que vous souhaitez utiliser, et utiliser tools:discard pour supprimer explicitement d'autres ressources supplémentaires.
Pour en savoir plus, consultez la section Réduire vos ressources.
tools:keep
Destiné à : <resources>
Utilisé par : outils de compilation avec réduction des ressources
Lorsque vous utilisez la réduction des ressources pour supprimer des ressources inutilisées, cet attribut vous permet de spécifier les ressources à conserver (en général parce qu'elles sont référencées de manière indirecte lors de l'exécution, par exemple en transmettant un nom de ressource généré dynamiquement à Resources.getIdentifier()).
Pour cela, créez un fichier XML dans votre répertoire de ressources (par exemple,
res/raw/keep.xml) avec une balise <resources> et spécifiez chaque ressource à conserver dans l'attribut tools:keep sous forme de
liste d'éléments séparés par une virgule. Vous pouvez utiliser un astérisque comme caractère générique.
Exemple :
<?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" />
Pour en savoir plus, consultez la section Réduire vos ressources.
tools:discard
Destiné à <resources>
Utilisé par : outils de compilation avec réduction des ressources
Lorsque vous utilisez la réduction des ressources pour enlever les ressources inutilisées, cet attribut vous permet de spécifier les ressources à supprimer manuellement (en général parce que la ressource est référencée, mais d'une manière qui n'affecte pas votre application, ou parce que le plug-in Gradle a déduit de façon erronée que la ressource est référencée).
Pour cela, créez un fichier XML dans votre répertoire de ressources (par exemple,
res/raw/keep.xml) avec une balise <resources> et spécifiez chaque ressource à supprimer dans l'attribut tools:discard sous forme de
liste d'éléments séparés par une virgule. Vous pouvez utiliser un astérisque comme caractère générique.
Exemple :
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="@layout/unused_1" />
Pour en savoir plus, consultez la section Réduire vos ressources.