Jetpack Compose は UI のデザイン時ツールを Kotlin で直接処理しますが、プロジェクト レベルの構成には tools: 名前空間が依然として不可欠です。AndroidManifest.xml や res/raw/keep.xml などの標準の Android XML ファイルでは、tools: 属性を使用して lint の警告を管理し、リソース圧縮ツールを構成します。
これらの XML 属性はアプリのビルド時にビルドツールによって削除されるため、APK のサイズと実行時の動作には影響しません。
これらの XML 属性を使用するには、次のように、それらを使用する各 XML ファイルのルート要素に tools 名前空間を追加します。
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
エラー処理属性
次の属性により、lint の警告メッセージを抑制できます。
tools:ignore
対象: すべての要素
属性を使用するツール: lint
この属性を使用して、対象の要素またはその下位要素に関する問題のうち lint で無視するものを、lint 問題 ID のカンマ区切りリストで指定できます。
たとえば、次のようにして MissingTranslation エラーを無視するようにツールに指示できます。
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
対象: すべての要素
属性を使用するツール: lint
この属性は、@TargetApi アノテーションが Java コード
で機能するのと同じように、Kotlin コードの @RequiresApi アノテーションと同じように機能します。この要素をサポートする API レベル(整数またはコード名)を指定できます。
この属性を使用して、この要素(およびすべての子)を、指定された API レベル以上でのみ使用することを lint ツールに伝えることができます。これにより、minSdkVersion として指定した API レベルで要素またはその属性が利用できない場合も、lint は警告を表示しなくなります。
たとえば、宣言する
<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> 要素内のリソースのデフォルトの言語またはロケールを指定できます。指定しなかった場合、言語は英語であると見なされます。
値には、有効なロケール識別子を指定する必要があります。
たとえば、以下のコードをデフォルトの 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")が使用されます。厳格モードを使用するには、次のように 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() に渡すなどの方法でリソースが実行時に間接的に参照される場合に有用です。
使用するには、リソース ディレクトリ(例:
res/raw/keep.xml)に <resources> タグ
を含む 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 プラグインが誤って推測した場合に有用です。
使用するには、リソース ディレクトリ(例:
res/raw/keep.xml)に <resources> タグ
を含む XML ファイルを作成し、tools:discard 属性で破棄する各リソースを
カンマ区切りのリストとして指定します。アスタリスク文字をワイルドカードとして使用できます。
次に例を示します。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="@layout/unused_1" />
詳細については、 リソースの圧縮をご覧ください。