Jetpack Compose obsługuje narzędzia do projektowania interfejsu bezpośrednio w Kotlinie, ale przestrzeń nazw
tools: jest nadal niezbędna w przypadku konfiguracji na poziomie projektu. Standardowe pliki XML Androida, takie jak AndroidManifest.xml i res/raw/keep.xml, używają atrybutów tools: do zarządzania ostrzeżeniami Lint i konfigurowania narzędzia do zmniejszania rozmiaru zasobów.
Podczas kompilowania aplikacji narzędzia do kompilacji usuwają te atrybuty, więc nie mają one wpływu na rozmiar pliku APK ani działanie w czasie wykonywania.
Aby używać tych atrybutów, dodaj przestrzeń nazw tools do elementu głównego każdego pliku XML, w którym chcesz ich używać, jak pokazano tutaj:
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
Atrybuty obsługi błędów
Te atrybuty pomagają wyciszyć ostrzeżenia narzędzia lint:
tools:ignore
Przeznaczenie: dowolny element
Używane przez: Lint
Ten atrybut akceptuje listę rozdzieloną przecinkami identyfikatorów problemów z lintem, które narzędzia mają ignorować w tym elemencie lub w dowolnym z jego elementów podrzędnych.
Możesz na przykład nakazać narzędziom zignorowanie błędu MissingTranslation:
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
Przeznaczenie: dowolny element
Używane przez: Lint
Ten atrybut działa tak samo jak adnotacja @TargetApi w kodzie Java lub adnotacja @RequiresApi w kodzie Kotlin. Umożliwia określenie poziomu interfejsu API (jako liczby całkowitej lub kryptonimu), który obsługuje ten element.
Informuje to narzędzia lint, że uważasz, że ten element i wszystkie jego elementy podrzędne są używane tylko na określonym poziomie interfejsu API lub wyższym. Dzięki temu narzędzie lint nie będzie wyświetlać ostrzeżeń, jeśli dany element lub jego atrybuty nie są dostępne na poziomie interfejsu API określonym jako minSdkVersion.
Możesz na przykład użyć tego atrybutu, ponieważ deklarujesz <service> w AndroidManifest.xml, który używa typu usługi na pierwszym planie dostępnego tylko na poziomie interfejsu API 34 i wyższym, ale minSdkVersion w projekcie jest niższy:
<service
android:name=".playback.MediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="34" />
tools:locale
Przeznaczone dla: <resources>
Używane przez: Lint, edytor Androida Studio
Informuje to narzędzia, jaki jest domyślny język lub region dla zasobów w danym elemencie <resources>, aby uniknąć ostrzeżeń z modułu sprawdzania pisowni.
W przeciwnym razie narzędzie zakłada, że język to angielski.
Wartość musi być prawidłowym kwalifikatorem języka.
Możesz na przykład dodać ten kod do domyślnego pliku values/strings.xml, aby wskazać, że język używany w domyślnych ciągach tekstowych to hiszpański, a nie angielski:
<resources xmlns:tools="http://schemas.android.com/tools"
tools:locale="es">
Atrybuty zmniejszania zasobów
Te atrybuty umożliwiają włączenie ścisłego sprawdzania odwołań i określenie, czy zachować, czy odrzucić niektóre zasoby podczas korzystania z zmniejszania rozmiaru zasobów.
Aby włączyć zmniejszanie zasobów, ustaw we właściwości shrinkResources w pliku build.gradle wartość true, a w przypadku zmniejszania kodu – minifyEnabled.
Przykład:
Dynamiczny
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
Przeznaczone dla: <resources>
Używane przez: narzędzia do kompilacji z funkcją zmniejszania zasobów
Ten atrybut pozwala określić, czy narzędzia do kompilacji mają używać tych elementów:
- Tryb awaryjny: zachowaj wszystkie zasoby, które są wyraźnie cytowane i mogą być dynamicznie przywoływane za pomocą wywołania
Resources.getIdentifier(). - Tryb ścisły: zachowuje tylko zasoby, które są wyraźnie cytowane w kodzie lub w innych zasobach.
Domyślnie używany jest tryb awaryjny (shrinkMode="safe"). Aby zamiast niego używać trybu ścisłego, dodaj shrinkMode="strict" do tagu <resources>, jak pokazano tutaj:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="strict" />
Gdy włączysz tryb ścisły, możesz użyć polecenia tools:keep, aby zachować usunięte zasoby, których faktycznie potrzebujesz, oraz polecenia tools:discard, aby usunąć jeszcze więcej zasobów.
Więcej informacji znajdziesz w artykule Zmniejszanie rozmiaru zasobów.
tools:keep
Przeznaczone dla: <resources>
Używane przez: narzędzia do kompilacji z funkcją zmniejszania zasobów
Gdy używasz zmniejszania zasobów do usuwania nieużywanych zasobów, ten atrybut umożliwia określenie zasobów do zachowania, zwykle dlatego, że są one przywoływane w sposób pośredni w czasie działania programu, np. przez przekazanie dynamicznie wygenerowanej nazwy zasobu do Resources.getIdentifier().
Aby go użyć, utwórz w katalogu zasobów (np. res/raw/keep.xml) plik XML z tagiem <resources> i określ każdy zasób, który ma zostać zachowany, w atrybucie tools:keep jako listę rozdzieloną przecinkami. Jako symbolu wieloznacznego możesz użyć gwiazdki.
Przykład:
<?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" />
Więcej informacji znajdziesz w artykule Zmniejszanie zasobów.
tools:discard
Przeznaczone dla: <resources>
Używane przez: narzędzia do kompilacji z funkcją zmniejszania zasobów
Gdy używasz zmniejszania zasobów do usuwania nieużywanych zasobów, ten atrybut umożliwia określenie zasobów, które chcesz ręcznie odrzucić. Zwykle dzieje się tak, ponieważ zasób jest przywoływany, ale w sposób, który nie ma wpływu na aplikację, lub dlatego, że wtyczka Gradle nieprawidłowo wywnioskowała, że zasób jest przywoływany.
Aby go użyć, utwórz w katalogu zasobów (np. res/raw/keep.xml) plik XML z tagiem <resources> i określ każdy zasób do odrzucenia w atrybucie tools:discard jako listę rozdzieloną przecinkami. Jako symbolu wieloznacznego możesz użyć gwiazdki.
Przykład:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="@layout/unused_1" />
Więcej informacji znajdziesz w artykule Zmniejszanie rozmiaru zasobów.