टूल एट्रिब्यूट का रेफ़रंस

Jetpack Compose, Kotlin में यूज़र इंटरफ़ेस (यूआई) डिज़ाइन-टाइम टूलिंग को सीधे तौर पर हैंडल करता है. हालांकि, प्रोजेक्ट-लेवल के कॉन्फ़िगरेशन के लिए tools: नेमस्पेस अब भी ज़रूरी है. AndroidManifest.xml और res/raw/keep.xml जैसी स्टैंडर्ड Android एक्सएमएल फ़ाइलें, Lint की चेतावनियों को मैनेज करने और रिसॉर्स श्रिंकर को कॉन्फ़िगर करने के लिए tools: एट्रिब्यूट का इस्तेमाल करती हैं.

ऐप्लिकेशन बनाते समय, बिल्ड टूल इन एट्रिब्यूट को हटा देते हैं. इससे, आपके APK के साइज़ या रनटाइम के व्यवहार पर कोई असर नहीं पड़ता.

इन एट्रिब्यूट का इस्तेमाल करने के लिए, हर उस एक्सएमएल फ़ाइल के रूट एलिमेंट में tools नेमस्पेस जोड़ें जहां आपको इनका इस्तेमाल करना है. ऐसा यहां दिखाए गए तरीके से करें:

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

गड़बड़ी ठीक करने से जुड़े एट्रिब्यूट

यहां दिए गए एट्रिब्यूट, लिंट की चेतावनी वाले मैसेज को छिपाने में मदद करते हैं:

tools:ignore

इस्तेमाल किया जा सकता है: किसी भी एलिमेंट के लिए

इस्तेमाल किया गया: Lint

इस एट्रिब्यूट में, कॉमा लगाकर अलग किए गए ऐसे लिंट इश्यू आईडी की सूची दी जा सकती है जिन्हें आपको इस एलिमेंट या इसके किसी भी डिसेंडेंट पर टूल से अनदेखा करवाना है.

उदाहरण के लिए, टूल को MissingTranslation गड़बड़ी को अनदेखा करने के लिए कहा जा सकता है:

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

tools:targetApi

इस्तेमाल किया जा सकता है: किसी भी एलिमेंट के लिए

इस्तेमाल किया गया: Lint

यह एट्रिब्यूट, Java कोड में @TargetApi एनोटेशन या Kotlin कोड में @RequiresApi एनोटेशन की तरह ही काम करता है. इससे, एपीआई लेवल (पूर्णांक या कोड नेम के तौर पर) तय किया जा सकता है, जो इस एलिमेंट के साथ काम करता है.

इससे लिंट टूल को पता चलता है कि आपको लगता है कि इस एलिमेंट और इसके किसी भी चाइल्ड का इस्तेमाल, सिर्फ़ तय किए गए एपीआई लेवल या उससे ऊपर के लेवल पर किया जाता है. इससे लिंट, आपको चेतावनी नहीं देगा. ऐसा तब होगा, जब आपने minSdkVersion के तौर पर जो एपीआई लेवल तय किया है उस पर वह एलिमेंट या उसके एट्रिब्यूट उपलब्ध नहीं हैं.

उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल तब किया जा सकता है, जब आपको अपने AndroidManifest.xml में <service> का एलान करना हो. यह <service>, फ़ोरग्राउंड सेवा के ऐसे टाइप का इस्तेमाल करता है जो सिर्फ़ एपीआई लेवल 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> एलिमेंट में मौजूद संसाधनों के लिए, डिफ़ॉल्ट भाषा या स्थान-भाषा क्या है, ताकि स्पेलचेकर से मिलने वाली चेतावनियों से बचा जा सके. अगर ऐसा नहीं किया जाता है, तो टूल यह मान लेता है कि भाषा अंग्रेज़ी है.

वैल्यू, मान्य locale qualifier होनी चाहिए.

उदाहरण के लिए, डिफ़ॉल्ट स्ट्रिंग के लिए इस्तेमाल की गई भाषा को अंग्रेज़ी के बजाय स्पैनिश के तौर पर दिखाने के लिए, इसे अपनी डिफ़ॉल्ट values/strings.xml फ़ाइल में जोड़ा जा सकता है:

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

इस्तेमाल नहीं किए जाने वाले रिसॉर्स को हटाने की प्रोसेस से जुड़े एट्रिब्यूट

इन एट्रिब्यूट की मदद से, रेफ़रंस की बारीकी से जांच करने की सुविधा चालू की जा सकती है. साथ ही, यह तय किया जा सकता है कि संसाधन कम करने की सुविधा का इस्तेमाल करते समय, कुछ संसाधनों को रखना है या हटाना है.

संसाधन छोटा करने की सुविधा चालू करने के लिए, अपनी build.gradle फ़ाइल में shrinkResources प्रॉपर्टी को true पर सेट करें. साथ ही, कोड छोटा करने के लिए 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") का इस्तेमाल किया जाता है. अगर आपको स्ट्रिक्ट मोड का इस्तेमाल करना है, तो <resources> टैग में shrinkMode="strict" जोड़ें. यहां इसका तरीका बताया गया है:

<?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> टैग का इस्तेमाल करें. साथ ही, 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> टैग का इस्तेमाल करें. साथ ही, जिन संसाधनों को हटाना है उन्हें tools:discard एट्रिब्यूट में कॉमा लगाकर अलग की गई सूची के तौर पर डालें. तारे के निशान (*) को वाइल्डकार्ड के तौर पर इस्तेमाल किया जा सकता है.

उदाहरण के लिए:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:discard="@layout/unused_1" />

ज़्यादा जानकारी के लिए, अपने संसाधनों को छोटा करना लेख पढ़ें.

अन्य संसाधन

कॉन्टेंट देखता है