מסמך עזר בנושא מאפיינים של כלים

‫Jetpack Compose מטפל בכלי עיצוב ממשק משתמש ישירות ב-Kotlin, אבל מרחב השמות tools: עדיין חיוני להגדרות ברמת הפרויקט. בקובצי XML רגילים של Android, כמו AndroidManifest.xml ו-res/raw/keep.xml, משתמשים במאפייני tools: כדי לנהל אזהרות של Lint ולהגדיר את הכלי לצמצום משאבים.

כשמבצעים build לאפליקציה, כלי ה-build מסירים את המאפיינים האלה כדי שלא תהיה להם השפעה על גודל ה-APK או על התנהגות זמן הריצה.

כדי להשתמש במאפיינים האלה, צריך להוסיף את מרחב השמות tools לרכיב הבסיס של כל קובץ XML שבו רוצים להשתמש בהם, כמו שמוצג כאן:

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

מאפיינים לטיפול בשגיאות

המאפיינים הבאים עוזרים להשבית הודעות אזהרה של Lint:

tools:ignore

מיועד ל: כל רכיב

בשימוש על ידי: Lint

במאפיין הזה אפשר להזין רשימה מופרדת בפסיקים של מזהי בעיות ב-lint שרוצים שהכלים יתעלמו מהן ברכיב הזה או בכל רכיב צאצא שלו.

לדוגמה, אפשר להנחות את הכלים להתעלם מהשגיאה MissingTranslation:

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

tools:targetApi

מיועד ל: כל רכיב

בשימוש על ידי: Lint

המאפיין הזה פועל כמו ההערה @TargetApi בקוד Java או ההערה @RequiresApi בקוד Kotlin. אפשר לציין את רמת ה-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, עורך Android Studio

כך הכלים יודעים מהי שפת ברירת המחדל או הלוקאל של המשאבים ברכיב <resources> הנתון, כדי למנוע אזהרות מבודק האיות. אחרת, הכלי מניח שהשפה היא אנגלית.

הערך חייב להיות מזהה לוקאל תקין.

לדוגמה, אתם יכולים להוסיף את השורה הזו לקובץ values/strings.xml שמוגדר כברירת מחדל כדי לציין שהשפה שבה נעשה שימוש במחרוזות שמוגדרות כברירת מחדל היא ספרדית ולא אנגלית:

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

מאפיינים של כיווץ משאבים

המאפיינים הבאים מאפשרים להפעיל בדיקות קפדניות של הפניות ולהצהיר אם לשמור או להסיר משאבים מסוימים כשמשתמשים בצמצום משאבים.

כדי להפעיל את כיווץ מקורות המידע, מגדירים את המאפיין shrinkResources לערך true בקובץ build.gradle, לצד minifyEnabled לכיווץ קוד.

לדוגמה:

מגניב

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().

כדי להשתמש בו, יוצרים קובץ XML בספריית המשאבים (לדוגמה, res/raw/keep.xml) עם תג <resources> ומציינים כל משאב שרוצים לשמור במאפיין 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 הסיק באופן שגוי שיש הפניה למשאב.

כדי להשתמש בתכונה הזו, יוצרים קובץ 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" />

מידע נוסף מופיע במאמר צמצום המשאבים.

מקורות מידע נוספים

צפיות בתוכן