अपने ऐप्लिकेशन का आकार कम करना

उपयोगकर्ता अक्सर ऐसे ऐप्लिकेशन डाउनलोड करने से बचते हैं जो बहुत बड़े लगते हैं. ऐसा खास तौर पर उन उभरते हुए बाज़ारों में होता है जहां डिवाइस, 2G और 3G नेटवर्क से कनेक्ट होते हैं या डेटा की सीमित सुविधा वाले प्लान पर काम करते हैं. इस पेज पर, ऐप्लिकेशन के डाउनलोड साइज़ को कम करने का तरीका बताया गया है. इससे ज़्यादा उपयोगकर्ता आपका ऐप्लिकेशन डाउनलोड कर पाएंगे.

Android ऐप्लिकेशन बंडल की मदद से अपना ऐप्लिकेशन अपलोड करना

Google Play पर पब्लिश करते समय, ऐप्लिकेशन का साइज़ तुरंत कम करने के लिए, अपने ऐप्लिकेशन को Android ऐप्लिकेशन बंडल के तौर पर अपलोड करें. Android ऐप्लिकेशन बंडल, अपलोड करने का एक फ़ॉर्मैट है. इसमें आपके ऐप्लिकेशन का पूरा कोड और रिसॉर्स शामिल होता है. हालांकि, APK जनरेट करने और उसे Google Play पर साइन करने की प्रोसेस को बाद में किया जाता है.

इसके बाद, Google Play का ऐप्लिकेशन उपलब्ध कराने वाला मॉडल, आपके ऐप्लिकेशन बंडल का इस्तेमाल करके, हर उपयोगकर्ता के डिवाइस कॉन्फ़िगरेशन के लिए ऑप्टिमाइज़ किए गए APK जनरेट करता है और उन्हें उपलब्ध कराता है. इससे, उपयोगकर्ताओं को आपके ऐप्लिकेशन को चलाने के लिए ज़रूरी कोड और संसाधन ही डाउनलोड करने पड़ते हैं. अलग-अलग डिवाइसों के साथ काम करने के लिए, आपको कई APK बनाने, उन पर हस्ताक्षर करने, और उन्हें मैनेज करने की ज़रूरत नहीं होती. साथ ही, उपयोगकर्ताओं को कम साइज़ के और ज़्यादा ऑप्टिमाइज़ किए गए APK डाउनलोड करने पड़ते हैं.

Google Play, ऐप्लिकेशन बंडल के साथ पब्लिश किए गए ऐप्लिकेशन के लिए, कंप्रेस किए गए डाउनलोड साइज़ की सीमा 200 एमबी तय करता है. Play की सुविधा डिलीवरी और Play एसेट डिलीवरी का इस्तेमाल करके, ऐप्लिकेशन के साइज़ को बड़ा किया जा सकता है. हालांकि, ऐप्लिकेशन का साइज़ बढ़ाने से, उसे इंस्टॉल किए जाने की दर पर बुरा असर पड़ सकता है और उसे अनइंस्टॉल किए जाने की संख्या बढ़ सकती है. इसलिए, हमारा सुझाव है कि आप इस पेज पर दिए गए दिशा-निर्देशों का पालन करें, ताकि आपके ऐप्लिकेशन के डाउनलोड साइज़ को ज़्यादा से ज़्यादा कम किया जा सके.

APK के स्ट्रक्चर को समझना

अपने ऐप्लिकेशन का साइज़ कम करने से पहले, उसके APK के स्ट्रक्चर को समझना मददगार होता है. APK फ़ाइल में एक ZIP संग्रह होता है, जिसमें आपके ऐप्लिकेशन की सभी फ़ाइलें शामिल होती हैं. इन फ़ाइलों में, Java क्लास फ़ाइलें, रिसॉर्स फ़ाइलें, और संकलित रिसॉर्स वाली फ़ाइल शामिल होती है.

APK में ये डायरेक्ट्री होती हैं:

  • META-INF/: इसमें CERT.SF और CERT.RSA हस्ताक्षर वाली फ़ाइलें और MANIFEST.MF मेनिफ़ेस्ट फ़ाइल शामिल होती है.
  • assets/: इसमें ऐप्लिकेशन की ऐसेट होती हैं, जिन्हें ऐप्लिकेशन AssetManager ऑब्जेक्ट का इस्तेमाल करके वापस पा सकता है.
  • res/: इसमें ऐसे संसाधन होते हैं जिन्हें resources.arsc में संकलित नहीं किया गया है.
  • lib/: इसमें प्रोसेसर की सॉफ़्टवेयर लेयर के हिसाब से कॉम्पाइल किया गया कोड होता है. इस डायरेक्ट्री में हर प्लैटफ़ॉर्म टाइप के लिए एक सब-डायरेक्ट्री होती है, जैसे कि armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, और mips.

APK में ये फ़ाइलें भी शामिल होती हैं. सिर्फ़ AndroidManifest.xml की वैल्यू देना ज़रूरी है:

  • resources.arsc: इसमें कंपाइल किए गए संसाधन शामिल होते हैं. इस फ़ाइल में, res/values/ फ़ोल्डर के सभी कॉन्फ़िगरेशन का एक्सएमएल कॉन्टेंट होता है. पैकेजिंग टूल, इस एक्सएमएल कॉन्टेंट को निकालता है, उसे बाइनरी फ़ॉर्मैट में कंपाइल करता है, और कॉन्टेंट को संग्रहित करता है. इस कॉन्टेंट में भाषा की स्ट्रिंग और स्टाइल के साथ-साथ, ऐसे कॉन्टेंट के पाथ भी शामिल होते हैं जो सीधे resources.arsc फ़ाइल में शामिल नहीं होते. जैसे, लेआउट फ़ाइलें और इमेज.
  • classes.dex: इसमें DEX फ़ाइल फ़ॉर्मैट में कॉम्पाइल की गई क्लास होती हैं, जिन्हें Dalvik या ART वर्चुअल मशीन समझती है.
  • AndroidManifest.xml: इसमें Android की मुख्य मेनिफ़ेस्ट फ़ाइल होती है. इस फ़ाइल में, ऐप्लिकेशन का नाम, वर्शन, ऐक्सेस करने के अधिकार, और रेफ़रंस वाली लाइब्रेरी फ़ाइलों की जानकारी होती है. यह फ़ाइल, Android के बाइनरी एक्सएमएल फ़ॉर्मैट का इस्तेमाल करती है.

संसाधनों की संख्या और साइज़ कम करना

APK के साइज़ से यह तय होता है कि आपका ऐप्लिकेशन कितनी तेज़ी से लोड होगा, कितनी मेमोरी का इस्तेमाल करेगा, और कितनी बैटरी खर्च करेगा. अपने APK को छोटा करने के लिए, उसमें मौजूद संसाधनों की संख्या और साइज़ कम करें. खास तौर पर, उन संसाधनों को हटाया जा सकता है जिनका इस्तेमाल आपका ऐप्लिकेशन अब नहीं करता. साथ ही, इमेज फ़ाइलों के बजाय, स्केले किए जा सकने वाले Drawable ऑब्जेक्ट का इस्तेमाल किया जा सकता है. इस सेक्शन में इन तरीकों के साथ-साथ, अपने ऐप्लिकेशन में मौजूद संसाधनों को कम करने के अन्य तरीकों के बारे में बताया गया है. इससे, APK का कुल साइज़ कम किया जा सकता है.

इस्तेमाल न किए गए संसाधन हटाना

lint टूल, Android Studio में शामिल एक स्टैटिक कोड विश्लेषक है. यह आपके res/ फ़ोल्डर में ऐसे संसाधनों का पता लगाता है जिनका आपके कोड में रेफ़रंस नहीं दिया गया है. जब lint टूल को आपके प्रोजेक्ट में ऐसा संसाधन मिलता है जिसका इस्तेमाल नहीं किया गया है, तो यह इस तरह का मैसेज प्रिंट करता है:

res/layout/preferences.xml: Warning: The resource R.layout.preferences appears
    to be unused [UnusedResources]

अपने कोड में जोड़ी गई लाइब्रेरी में, इस्तेमाल नहीं किए गए संसाधन शामिल हो सकते हैं. अगर आपने अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में shrinkResources को चालू किया है, तो Gradle आपके लिए रिसॉर्स को अपने-आप हटा सकता है.

Kotlin

android {
    // Other settings.

    buildTypes {
        getByName("release") {
            minifyEnabled = true
            shrinkResources = true
            proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro")
        }
    }
}

Groovy

android {
    // Other settings.

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

shrinkResources का इस्तेमाल करने के लिए, कोड का साइज़ कम करने की सुविधा चालू करें. बिल्ड करने की प्रोसेस के दौरान, R8 सबसे पहले इस्तेमाल न किए गए कोड को हटा देता है. इसके बाद, Android Gradle प्लग इन उन रिसॉर्स को हटा देता है जिनका इस्तेमाल नहीं किया गया है.

कोड और रिसॉर्स को छोटा करने के बारे में ज़्यादा जानकारी के लिए, अपने ऐप्लिकेशन को छोटा करना, उलझाना, और ऑप्टिमाइज़ करना लेख पढ़ें. साथ ही, Android Studio के APK साइज़ को कम करने के अन्य तरीकों के बारे में भी जानें.

Android Gradle प्लग इन 7.0 और उसके बाद के वर्शन में, उन कॉन्फ़िगरेशन के बारे में बताया जा सकता है जिनके साथ आपका ऐप्लिकेशन काम करता है. Gradle, resourceConfigurations फ़्लेवर और defaultConfig विकल्प का इस्तेमाल करके, यह जानकारी बिल्ड सिस्टम को भेजता है. इसके बाद, बिल्ड सिस्टम, APK में ऐसे संसाधनों को दिखने से रोकता है जो काम न करने वाले अन्य कॉन्फ़िगरेशन के साथ काम नहीं करते. इससे APK का साइज़ कम हो जाता है. इस सुविधा के बारे में ज़्यादा जानकारी के लिए, इस्तेमाल न किए गए वैकल्पिक संसाधनों को हटाना लेख पढ़ें.

लाइब्रेरी से संसाधनों के इस्तेमाल को कम करना

Android ऐप्लिकेशन डेवलप करते समय, आम तौर पर बाहरी लाइब्रेरी का इस्तेमाल किया जाता है. इससे, ऐप्लिकेशन को इस्तेमाल करना आसान हो जाता है और इसमें कई तरह की सुविधाएं मिलती हैं. उदाहरण के लिए, पुराने डिवाइसों पर उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, AndroidX का रेफ़रंस दिया जा सकता है. इसके अलावा, अपने ऐप्लिकेशन में टेक्स्ट का अपने-आप अनुवाद पाने के लिए, Google Play services का इस्तेमाल किया जा सकता है.

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

नेटिव ऐनिमेशन वाली इमेज को डिकोड करना

Android 12 (एपीआई लेवल 31) में, एनडीके ImageDecoder एपीआई को ऐनिमेटेड GIF और ऐनिमेटेड WebP फ़ाइल फ़ॉर्मैट का इस्तेमाल करने वाली इमेज के सभी फ़्रेम और टाइमिंग डेटा को डिकोड करने के लिए बड़ा किया गया है.

APK के साइज़ को और कम करने के लिए, तीसरे पक्ष की लाइब्रेरी के बजाय ImageDecoder का इस्तेमाल करें. साथ ही, सुरक्षा और परफ़ॉर्मेंस से जुड़े आने वाले अपडेट का फ़ायदा पाएं.

ImageDecoder एपीआई के बारे में ज़्यादा जानकारी के लिए, API reference और GitHub पर मौजूद सैंपल देखें.

सिर्फ़ कुछ खास डेंसिटी के साथ काम करते हैं

Android, अलग-अलग स्क्रीन डेंसिटी के साथ काम करता है. जैसे:

  • ldpi
  • mdpi
  • tvdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

Android, पहले से मौजूद डेंसिटी के साथ काम करता है. हालांकि, आपको रेस्टर की गई एसेट को हर डेंसिटी के लिए एक्सपोर्ट करने की ज़रूरत नहीं है.

अगर आपको पता है कि आपके कुछ ही उपयोगकर्ताओं के पास खास डेंसिटी वाले डिवाइस हैं, तो यह देखें कि आपको अपने ऐप्लिकेशन में उन डेंसिटी को बंडल करना है या नहीं. अगर किसी खास स्क्रीन डेंसिटी के लिए संसाधन शामिल नहीं किए जाते हैं, तो Android उन मौजूदा संसाधनों को अपने-आप स्केल कर देता है जिन्हें मूल रूप से दूसरी स्क्रीन डेंसिटी के लिए डिज़ाइन किया गया था.

अगर आपके ऐप्लिकेशन में सिर्फ़ स्केल की गई इमेज की ज़रूरत है, तो drawable-nodpi/ में किसी इमेज का एक वैरिएंट रखकर, ज़्यादा स्टोरेज बचाया जा सकता है. हमारा सुझाव है कि आप अपने ऐप्लिकेशन में कम से कम xxhdpi इमेज वैरिएंट शामिल करें.

स्क्रीन की डेंसिटी के बारे में ज़्यादा जानने के लिए, स्क्रीन के साइज़ और डेंसिटी देखें.

ड्रॉ किए जा सकने वाले ऑब्जेक्ट का इस्तेमाल करना

कुछ इमेज के लिए, स्टैटिक इमेज रिसॉर्स की ज़रूरत नहीं होती. इसके बजाय, फ़्रेमवर्क रनटाइम के दौरान, इमेज को डाइनैमिक तौर पर ड्रॉ कर सकता है. Drawable ऑब्जेक्ट या एक्सएमएल में <shape>, आपके APK में थोड़ी जगह ले सकते हैं. इसके अलावा, एक्सएमएल Drawable ऑब्जेक्ट, Material Design के दिशा-निर्देशों के मुताबिक एक रंग वाली इमेज जनरेट करते हैं.

संसाधनों का फिर से इस्तेमाल करना

किसी इमेज के वैरिएंट के लिए, अलग रिसॉर्स शामिल किया जा सकता है. जैसे, एक ही इमेज के टिंटेड, शेडेड या घुमाए गए वर्शन. हालांकि, हमारा सुझाव है कि आप संसाधनों के उसी सेट का फिर से इस्तेमाल करें और रनटाइम के दौरान ज़रूरत के हिसाब से उन्हें पसंद के मुताबिक बनाएं.

Android, किसी एसेट का रंग बदलने के लिए कई सुविधाएं उपलब्ध कराता है. इसके लिए, android:tint और tintMode एट्रिब्यूट का इस्तेमाल किया जा सकता है.

ऐसे संसाधनों को भी हटाया जा सकता है जो किसी दूसरे संसाधन के सिर्फ़ घुमाए गए वर्शन हैं. नीचे दिया गया कोड स्निपेट, इमेज के बीच में पिवट करके और उसे 180 डिग्री घुमाकर, "पसंद करें" को "नापसंद करें" में बदलने का उदाहरण देता है:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_thumb_up"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="180" />

कोड से रेंडर करना

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

PNG फ़ाइलों को छोटा करना

aapt टूल, बिल्ड करने की प्रोसेस के दौरान, res/drawable/ में मौजूद इमेज संसाधनों को ऑप्टिमाइज़ कर सकता है. इसके लिए, यह लॉसलेस कंप्रेसन का इस्तेमाल करता है. उदाहरण के लिए, aapt टूल, 256 से ज़्यादा रंगों वाले ट्रू-कलर PNG को कलर पैलेट वाले 8-बिट PNG में बदल सकता है. ऐसा करने से, इमेज की क्वालिटी में कोई बदलाव नहीं होता, लेकिन स्टोरेज में कम जगह लेती है.

aapt में ये सीमाएं हैं:

  • aapt टूल, asset/ फ़ोल्डर में मौजूद PNG फ़ाइलों को छोटा नहीं करता.
  • इमेज फ़ाइलों को ऑप्टिमाइज़ करने के लिए, aapt टूल में 256 या इससे कम रंगों का इस्तेमाल करना ज़रूरी है.
  • aapt टूल, पहले से कंप्रेस की गई PNG फ़ाइलों को बड़ा कर सकता है. इसे रोकने के लिए, isCrunchPngs फ़्लैग का इस्तेमाल करके, PNG फ़ाइलों के लिए इस प्रोसेस को बंद किया जा सकता है:
  • Kotlin

        buildTypes.all { isCrunchPngs = false }
        

    Groovy

        buildTypes.all { isCrunchPngs = false }
        

PNG और JPEG फ़ाइलों को कंप्रेस करना

pngcrush, pngquant या zopflipng जैसे टूल का इस्तेमाल करके, इमेज क्वालिटी में कोई बदलाव किए बिना PNG फ़ाइल का साइज़ कम किया जा सकता है. इन सभी टूल की मदद से, PNG फ़ाइल का साइज़ कम किया जा सकता है. ऐसा करने पर, इमेज की क्वालिटी में कोई बदलाव नहीं होता.

pngcrush टूल का इस्तेमाल करना खास तौर पर असरदार होता है. यह टूल, PNG फ़िल्टर और zlib (Deflate) पैरामीटर पर बार-बार काम करता है. साथ ही, इमेज को कंप्रेस करने के लिए, फ़िल्टर और पैरामीटर के हर कॉम्बिनेशन का इस्तेमाल करता है. इसके बाद, वह कॉन्फ़िगरेशन चुनता है जिससे सबसे छोटा कॉम्प्रेस किया गया आउटपुट मिलता है.

JPEG फ़ाइलों को कंप्रेस करने के लिए, packJPG और guetzli जैसे टूल का इस्तेमाल किया जा सकता है.

WebP फ़ाइल फ़ॉर्मैट का इस्तेमाल करना

PNG या JPEG फ़ाइलों के बजाय, अपनी इमेज के लिए WebP फ़ाइल फ़ॉर्मैट का भी इस्तेमाल किया जा सकता है. WebP फ़ॉर्मैट में, JPG और PNG की तरह लॉसी कंप्रेशन और ट्रांसपेरंसी की सुविधा मिलती है. साथ ही, यह JPEG या PNG की तुलना में बेहतर तरीके से इमेज को कंप्रेस कर सकता है.

Android Studio का इस्तेमाल करके, मौजूदा BMP, JPG, PNG या स्टैटिक GIF इमेज को WebP फ़ॉर्मैट में बदला जा सकता है. ज़्यादा जानकारी के लिए, WebP इमेज बनाना लेख पढ़ें.

वेक्टर ग्राफ़िक का इस्तेमाल करना

वेक्टर ग्राफ़िक का इस्तेमाल करके, रिज़ॉल्यूशन पर निर्भर न करने वाले आइकॉन और स्केलेबल मीडिया बनाया जा सकता है. इन ग्राफ़िक का इस्तेमाल करके, अपने APK फ़ुटप्रिंट को काफ़ी कम किया जा सकता है. वेक्टर इमेज को Android में VectorDrawable ऑब्जेक्ट के तौर पर दिखाया जाता है. VectorDrawable ऑब्जेक्ट की मदद से, 100 बाइट की फ़ाइल से स्क्रीन के साइज़ के बराबर की शार्प इमेज जनरेट की जा सकती है.

हालांकि, सिस्टम को हर VectorDrawable ऑब्जेक्ट को रेंडर करने में काफ़ी ज़्यादा समय लगता है. साथ ही, बड़ी इमेज को स्क्रीन पर दिखने में और भी ज़्यादा समय लगता है. इसलिए, इन वेक्टर ग्राफ़िक का इस्तेमाल सिर्फ़ छोटी इमेज दिखाने के लिए करें.

VectorDrawable ऑब्जेक्ट के साथ काम करने के बारे में ज़्यादा जानने के लिए, ड्रॉअर देखें.

ऐनिमेशन वाली इमेज के लिए वेक्टर ग्राफ़िक का इस्तेमाल करना

फ़्रेम-दर-फ़्रेम ऐनिमेशन बनाने के लिए, AnimationDrawable का इस्तेमाल न करें. ऐसा करने के लिए, आपको ऐनिमेशन के हर फ़्रेम के लिए एक अलग बिटमैप फ़ाइल शामिल करनी होगी. इससे आपके APK का साइज़ काफ़ी बढ़ जाता है.

इसके बजाय, ऐनिमेशन वाले वेक्टर आर्टवर्क बनाने के लिए, AnimatedVectorDrawableCompat का इस्तेमाल करें.

नेटिव और Java कोड कम करना

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

जनरेट किया गया गै़र-ज़रूरी कोड हटाना

अपने-आप जनरेट होने वाले किसी भी कोड के फ़ुटप्रिंट को समझना न भूलें. उदाहरण के लिए, कई प्रोटोकॉल बफ़र टूल बहुत ज़्यादा तरीकों और क्लास जनरेट करते हैं. इससे आपके ऐप्लिकेशन का साइज़ दो या तीन गुना हो सकता है.

एनोटेशन से बचना

एक ही एनम, आपके ऐप्लिकेशन की classes.dex फ़ाइल में करीब 1.0 से 1.4 केबी जोड़ सकता है. जटिल सिस्टम या शेयर की गई लाइब्रेरी के लिए, ये जोड़ जल्दी इकट्ठा हो सकते हैं. अगर हो सके, तो @IntDef एनोटेशन और कोड को छोटा करने का इस्तेमाल करके, एनोटेशन हटाएं और उन्हें पूर्णांक में बदलें. इस तरह के कन्वर्ज़न में, सूची के सभी तरह के सुरक्षा फ़ायदे बनाए रहते हैं.

नेटिव बाइनरी का साइज़ कम करना

अगर आपका ऐप्लिकेशन नेटिव कोड और Android NDK का इस्तेमाल करता है, तो अपने कोड को ऑप्टिमाइज़ करके, अपने ऐप्लिकेशन के रिलीज़ वर्शन का साइज़ भी कम किया जा सकता है. डीबग सिंबल हटाना और नेटिव लाइब्रेरी को एक्सट्रैक्ट न करना, दो काम की तकनीकें हैं.

डीबग सिंबल हटाना

डीबग सिंबल का इस्तेमाल तब करना चाहिए, जब आपका ऐप्लिकेशन डेवलपमेंट में हो और उसे अब भी डीबग करने की ज़रूरत हो. नेटिव लाइब्रेरी से ग़ैर-ज़रूरी डीबग सिंबल हटाने के लिए, Android NDK में दिए गए arm-eabi-strip टूल का इस्तेमाल करें. इसके बाद, रिलीज़ बिल्ड को कंपाइल किया जा सकता है.

नेटिव लाइब्रेरी को एक्सट्रैक्ट करने से बचना

अपने ऐप्लिकेशन का रिलीज़ वर्शन बनाते समय, बिना कंप्रेस की गई .so फ़ाइलों को APK में पैकेज करें. इसके लिए, अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में useLegacyPackaging को false पर सेट करें. इस फ़्लैग को बंद करने पर, PackageManager को इंस्टॉलेशन के दौरान, APK से फ़ाइलों को फ़ाइल सिस्टम में कॉपी करने से रोका जा सकता है..so इस तरीके से, आपके ऐप्लिकेशन के अपडेट छोटे होते हैं.

एक से ज़्यादा लीन APK बनाए रखना

आपके APK में ऐसा कॉन्टेंट हो सकता है जिसे लोग डाउनलोड करते हैं, लेकिन कभी इस्तेमाल नहीं करते. जैसे, दूसरी भाषा या स्क्रीन के घनत्व के हिसाब से संसाधन. अपने उपयोगकर्ताओं के लिए डाउनलोड का साइज़ कम करने के लिए, Android ऐप्लिकेशन बंडल का इस्तेमाल करके Google Play पर अपना ऐप्लिकेशन अपलोड करें. ऐप्लिकेशन बंडल अपलोड करने से, Google Play को हर उपयोगकर्ता के डिवाइस कॉन्फ़िगरेशन के लिए, ऑप्टिमाइज़ किए गए APK जनरेट करने और उन्हें दिखाने में मदद मिलती है. इससे, उपयोगकर्ताओं को सिर्फ़ वही कोड और संसाधन डाउनलोड करने पड़ते हैं जो आपके ऐप्लिकेशन को चलाने के लिए ज़रूरी होते हैं. अलग-अलग डिवाइसों के साथ काम करने के लिए, आपको कई APK बनाने, उन पर हस्ताक्षर करने, और उन्हें मैनेज करने की ज़रूरत नहीं होती. साथ ही, उपयोगकर्ताओं को कम साइज़ और बेहतर तरीके से काम करने वाले ऐप्लिकेशन डाउनलोड करने पड़ते हैं.

अगर आपको अपना ऐप्लिकेशन Google Play पर पब्लिश नहीं करना है, तो अपने ऐप्लिकेशन को कई APK में बांटा जा सकता है. इन APK को स्क्रीन साइज़ या GPU टेक्सचर के साथ काम करने की सुविधा जैसे फ़ैक्टर के आधार पर बांटा जा सकता है.

जब कोई उपयोगकर्ता आपका ऐप्लिकेशन डाउनलोड करता है, तो उसके डिवाइस पर डिवाइस की सुविधाओं और सेटिंग के हिसाब से सही APK मिलता है. इस तरह, डिवाइसों को उन सुविधाओं के लिए एसेट नहीं मिलतीं जो उनमें मौजूद नहीं हैं. उदाहरण के लिए, अगर किसी उपयोगकर्ता के पास hdpi डिवाइस है, तो उसे xxxhdpi रिसॉर्स की ज़रूरत नहीं है. ये ऐसे रिसॉर्स होते हैं जिन्हें ज़्यादा डेंसिटी वाले डिसप्ले वाले डिवाइसों के लिए शामिल किया जा सकता है.

ज़्यादा जानकारी के लिए, एक से ज़्यादा APK बनाना और एक से ज़्यादा APK के लिए सहायता देखें.