در حالی که Jetpack Compose ابزارهای زمان طراحی رابط کاربری را مستقیماً در کاتلین مدیریت میکند، فضای نام tools: هنوز برای پیکربندیهای سطح پروژه ضروری است. فایلهای XML استاندارد اندروید، مانند 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" >
ویژگیهای مدیریت خطا
ویژگیهای زیر به سرکوب پیامهای هشدار lint کمک میکنند:
tools:ignore
مناسب برای: هر عنصری
استفاده شده توسط: لینت
این ویژگی فهرستی از شناسههای مشکلات lint را که با کاما از هم جدا شدهاند، میپذیرد که میخواهید ابزارها روی این عنصر یا هر یک از فرزندان آن نادیده بگیرند.
برای مثال، میتوانید به ابزارها بگویید که خطای MissingTranslation را نادیده بگیرند:
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
مناسب برای : هر عنصری
استفاده شده توسط : لینت
این ویژگی مانند حاشیهنویسی @TargetApi در کد جاوا یا حاشیهنویسی @RequiresApi در کد کاتلین عمل میکند. این ویژگی به شما امکان میدهد سطح API (به صورت یک عدد صحیح یا به صورت نام کد) را که از این عنصر پشتیبانی میکند، مشخص کنید.
این به ابزارهای lint میگوید که شما معتقدید این عنصر و هر فرزندی فقط در سطح API مشخص شده یا بالاتر استفاده میشوند. این کار باعث میشود که lint در صورت عدم وجود آن عنصر یا ویژگیهای آن در سطح 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، ویرایشگر اندروید استودیو
این به ابزارها میگوید که زبان یا زبان پیشفرض برای منابع موجود در عنصر <resources> داده شده چیست تا از هشدارهای غلطیاب املایی جلوگیری شود. در غیر این صورت، ابزار فرض میکند که زبان انگلیسی است.
مقدار باید یک توصیفگر محلی معتبر باشد.
برای مثال، میتوانید این کد را به فایل پیشفرض values/strings.xml خود اضافه کنید تا نشان دهید که زبان مورد استفاده برای رشتههای پیشفرض اسپانیایی است نه انگلیسی:
<resources xmlns:tools="http://schemas.android.com/tools"
tools:locale="es">
ویژگیهای کاهش منابع
ویژگیهای زیر به شما امکان میدهند بررسیهای دقیق ارجاع را فعال کنید و هنگام استفاده از کاهش منابع، اعلام کنید که آیا منابع خاصی را نگه دارید یا دور بیندازید.
برای فعال کردن کاهش منابع، در فایل build.gradle خود، در کنار minifyEnabled برای کاهش کد، ویژگی shrinkResources را روی true تنظیم کنید.
برای مثال:
گرووی
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" />
وقتی حالت strict را فعال میکنید، ممکن است لازم باشد از tools:keep برای نگه داشتن منابعی که حذف شدهاند اما شما واقعاً میخواهید، استفاده کنید و tools:discard برای حذف صریح منابع بیشتر استفاده کنید.
برای اطلاعات بیشتر، به بخش «منابع خود را کاهش دهید» مراجعه کنید.
tools:keep
در نظر گرفته شده برای: <resources>
استفاده شده توسط: ابزارهای ساخت با کاهش منابع
هنگام استفاده از کاهش منابع برای حذف منابع بلااستفاده، این ویژگی به شما امکان میدهد منابعی را که میخواهید نگه دارید، مشخص کنید، معمولاً به این دلیل که در زمان اجرا به روشی غیرمستقیم به آنها ارجاع داده میشود، مانند ارسال نام منبع تولید شده به صورت پویا به Resources.getIdentifier() .
برای استفاده، یک فایل XML در دایرکتوری منابع خود (برای مثال، res/raw/keep.xml ) با برچسب <resources> ایجاد کنید و هر منبعی را که میخواهید نگه دارید در tools:keep به عنوان یک لیست جدا شده با کاما مشخص کنید. میتوانید از کاراکتر ستاره به عنوان wildcard استفاده کنید.
برای مثال:
<?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" />
برای اطلاعات بیشتر، به بخش «منابع خود را کاهش دهید» مراجعه کنید.