अपने इंस्टैंट ऐप्लिकेशन का साइज़ कम करें

चेतावनी: Google Play इंस्टैंट अब उपलब्ध नहीं होगा. दिसंबर 2025 से, इंस्टैंट ऐप्लिकेशन को Google Play से पब्लिश नहीं किया जा सकेगा और Google Play services के इंस्टैंट एपीआई काम नहीं करेंगे. उपयोगकर्ताओं को अब Play के ज़रिए, किसी भी तरीके से इंस्टैंट ऐप्लिकेशन नहीं दिखाए जाएंगे.

हम यह बदलाव, डेवलपर के सुझाव के आधार पर कर रहे हैं. साथ ही, Google Play इंस्टैंट की शुरुआत के बाद से, हम इसके इकोसिस्टम को बेहतर बनाने के लिए लगातार निवेश कर रहे हैं.

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

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

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

एक से ज़्यादा सुविधा वाले मॉड्यूल में रिफ़ैक्टर करना

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

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

सबसे सही तरीके

अपने ऐप्लिकेशन को रिफ़ैक्टर करते समय, इन सबसे सही तरीकों को ध्यान में रखें:

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

ऐप्लिकेशन के संसाधन अपडेट करना

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

इमेज की फ़ाइल का साइज़ कम करना

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

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

इस्तेमाल न की जाने वाली भाषाएं हटाना

अगर आपका ऐप्लिकेशन एक से ज़्यादा भाषाओं के साथ काम करता है, तो स्थानीय भाषा में उपलब्ध संसाधनों की संख्या कम करें. अगर आप "ऐप्लिकेशन कंपैट" लाइब्रेरी का इस्तेमाल करते हैं, जैसे कि android.support.v7.appcompat, तो यह तरीका खास तौर पर काम का है. इस लाइब्रेरी में कई भाषाओं में मैसेज शामिल होते हैं. इनमें से कुछ भाषाएं, आपका ऐप्लिकेशन शायद सपोर्ट न करता हो.

ज़्यादा जानने के लिए, इस्तेमाल न किए गए वैकल्पिक संसाधनों, खास तौर पर इस्तेमाल न की गई भाषाओं को हटाने का तरीका देखें.

अतिरिक्त फ़ाइलें हटाना

हो सकता है कि आपका ऐप्लिकेशन, उन संसाधनों का इस्तेमाल न करता हो जिन्हें आपने अपने प्रोजेक्ट में इंपोर्ट किया है. इन संसाधनों को हटाने में मदद करने के लिए, Android Studio में इस खास स्थिति के लिए, Lint की जांच की सुविधा मौजूद है. इस टूल का इस्तेमाल करने के लिए, यह तरीका अपनाएं:

  1. Control+Alt+Shift+I दबाएं. Mac OS पर, Command+Alt+Shift+I दबाएं.
  2. दिखने वाले डायलॉग में, "unused resources" टाइप करें.
  3. संसाधन के इस्तेमाल की जांच की प्रोसेस शुरू करने के लिए, Unused resources विकल्प चुनें.

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

इस्तेमाल न की गई लाइब्रेरी हटाना

किसी ऐप्लिकेशन का दायरा बढ़ने पर, उसमें डिपेंडेंसी की संख्या काफ़ी बढ़ सकती है. खास तौर पर, इनमें से किसी एक टाइप की डिपेंडेंसी:

  • नेटिव लाइब्रेरी: ऐसी लाइब्रेरी जिनमें नेटिव कोड होता है. आपका इंस्टैंट ऐप्लिकेशन, इस कोड को कभी नहीं चलाता.
  • ट्रांज़िटिव डिपेंडेंसी: ऐसी लाइब्रेरी जिन पर आपके ऐप्लिकेशन की इंपोर्ट की गई लाइब्रेरी निर्भर करती हैं.

Android Studio में, आपके ऐप्लिकेशन के प्रोजेक्ट में मौजूद किसी भी गैर-ज़रूरी डिपेंडेंसी की पहचान करने के लिए, कई काम के टूल मौजूद हैं:

बाहरी लाइब्रेरी

Android Studio के Project व्यू में, External Libraries सेक्शन शामिल होता है.

इस सेक्शन में, आपके ऐप्लिकेशन में इस्तेमाल की जाने वाली हर लाइब्रेरी शामिल होती है. इसमें नेटिव कोड और सभी ट्रांज़िटिव डिपेंडेंसी शामिल होती हैं. इस व्यू में, इस्तेमाल न की गई या डुप्लीकेट लाइब्रेरी ढूंढें जिनकी आपके ऐप्लिकेशन को ज़रूरत नहीं है.

APK ऐनालाइज़र

इंस्टैंट ऐप्लिकेशन के बिल्ड सहित, अलग-अलग बिल्ड की तुलना करने के लिए, APK ऐनालाइज़र टूल का इस्तेमाल किया जा सकता है.

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

<feature_module>/build.gradle

शानदार

dependencies {
    implementation('some-important-but-large-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}

Kotlin

dependencies {
    implementation('some-important-but-large-library') {
        exclude(group = "com.example.imgtools", module = "native")
    }
}

अपने ऐप्लिकेशन की डिपेंडेंसी के कुल इंपोर्ट साइज़ को कम करने के बारे में ज़्यादा जानने के लिए, डिपेंडेंसी मैनेजमेंट के लिए Gradle की गाइड देखें.

ऐसेट की क्लाउड डिलीवरी की सुविधा लागू करना

अगर आपको साइज़ को और कम करना है, तो आपको ऐसेट की क्लाउड डिलीवरी की सुविधा का इस्तेमाल करना पड़ सकता है.