DEX कोड ऑप्टिमाइज़ेशन

DEX कोड ऑप्टिमाइज़ेशन, 'Android की ज़रूरी जानकारी' की एक सुविधा है. इससे आपको अपने ऐप्लिकेशन के कंपाइलेशन की क्वालिटी, साइज़, और परफ़ॉर्मेंस को मॉनिटर करने और उसे बेहतर बनाने में मदद मिलती है. R8 या अन्य टूल (जैसे, ProGuard के साथ काम करने वाले ऑप्टिमाइज़र या सेकंडरी DEX पोस्ट-प्रोसेसर) का इस्तेमाल करके, अपने कोड को ऑप्टिमाइज़ और अस्पष्ट बनाने से, आपके ऐप्लिकेशन के DEX का साइज़ कम हो जाता है. साथ ही, रनटाइम की परफ़ॉर्मेंस बेहतर होती है और मेमोरी का इस्तेमाल कम होता है.

DEX या Dalvik Executable फ़ाइलों में, कंपाइल किया गया वह कोड होता है जिसका इस्तेमाल आपके ऐप्लिकेशन को चलाने के लिए किया जाता है. इसमें आम तौर पर, Java और Kotlin कोड शामिल होता है. हालांकि, इसमें कंपाइल किया गया C++ कोड या .so फ़ाइलें शामिल नहीं होती हैं.

'Android की ज़रूरी जानकारी' सुविधा, सभी ऐप्लिकेशन और गेम के लिए DEX कोड ऑप्टिमाइज़ेशन की मेट्रिक रिपोर्ट करती है. हालांकि, यह सिर्फ़ उन ऐप्लिकेशन और गेम के लिए थ्रेशोल्ड लागू करती है जो साइज़ से जुड़ी ज़रूरी शर्तों को पूरा करते हैं.

समस्या का पता लगाना

अगर आपके ऐप्लिकेशन के DEX कोड को ऑप्टिमाइज़ करने, छोटा करने या कोड को छिपाने का लेवल, तय किए गए कम से कम प्रतिशत को पूरा नहीं करता है, तो Android की ज़रूरी जानकारी आपको Play Console में सूचना दे सकती है.

ऑप्टिमाइज़ेशन स्कोर का हिसाब कैसे लगाया जाता है

एजीपी 8.10 या इसके बाद के वर्शन के सबसे नए पैच वर्शन की मदद से बनाए गए ऐप्लिकेशन के लिए, ये प्रतिशत शामिल की गई r8.json फ़ाइल से लिए जाते हैं. उदाहरण के लिए, 8.10.0 के बजाय 8.10.1. पक्का करें कि आपने अपने माइनर वर्शन के लिए, एजीपी और R8 के सबसे नए पैच वर्शन का इस्तेमाल किया हो, ताकि सटीक मेटाडेटा जनरेट हो सके.

एजीपी के पुराने वर्शन की मदद से बनाए गए ऐप्लिकेशन या किसी अन्य कोड ऑप्टिमाइज़र की मदद से ऑप्टिमाइज़ किए गए ऐप्लिकेशन के लिए, Android की ज़रूरी जानकारी, प्रॉक्सी के तौर पर कोड को छिपाने के प्रतिशत का अनुमान लगाती है. इसके लिए, mapping.txt फ़ाइल (अगर शामिल की गई हो) या DEX ह्यूरिस्टिक का इस्तेमाल किया जाता है. ऐसा उन ऐप्लिकेशन के लिए किया जाता है जिनमें r8.json शामिल नहीं है.

DEX का कम से कम कुल साइज़

Android की ज़रूरी जानकारी, सभी ऐप्लिकेशन के लिए कोड ऑप्टिमाइज़ेशन की मेट्रिक का हिसाब लगाती है. हालांकि, आपको सूचनाएं सिर्फ़ तब मिलेंगी, जब आपका ऐप्लिकेशन बंडल, DEX के कुल साइज़ से जुड़ी इन ज़रूरी शर्तों को पूरा करता हो:

  • ऐप्लिकेशन: बंडल में कम से कम 10 एमबी का DEX कोड होना चाहिए. इसे अनकंप्रेस किए गए साइज़ के तौर पर मेज़र किया जाता है
  • गेम: बंडल में कम से कम 50 एमबी का DEX कोड होना चाहिए. इसे अनकंप्रेस किए गए साइज़ के तौर पर मेज़र किया जाता है

कोड ऑप्टिमाइज़ेशन को स्थानीय तौर पर मेज़र करना

अपने ऐप्लिकेशन बंडल के अनकंप्रेस किए गए DEX साइज़ को मेज़र करने और ऑप्टिमाइज़ेशन, छोटा करने, और कोड को छिपाने के प्रतिशत की जानकारी पाने के लिए, android analyze चलाएं. यह जानकारी, Android की ज़रूरी जानकारी में मौजूद नतीजों से मेल खाती है:

android analyze <yourapp>.aab

समस्या ठीक करना

DEX कोड ऑप्टिमाइज़ेशन के कम स्कोर को बेहतर बनाने के लिए, अपने बिल्ड सिस्टम और ऑप्टिमाइज़र के आधार पर सुझाव देखें:

R8

R8 DEX कोड ऑप्टिमाइज़ेशन स्कोर को बेहतर बनाने के लिए, R8 ऑप्टिमाइज़ेशन को बेहतर बनाएं पर जाएं. साथ ही, R8 कॉन्फ़िगरेशन ऐनलाइज़र का इस्तेमाल करके यह समझें कि आपके 'कीप रूल', ऑप्टिमाइज़ेशन, श्रिंकिंग, और कोड को छिपाने के स्कोर पर कैसे असर डालते हैं. इन मेट्रिक की परिभाषाओं के बारे में ज़्यादा जानने के लिए, रिपोर्ट को समझें पर जाएं.

अगर Android Gradle प्लगिन (AGP) का इस्तेमाल किया जाता है, तो R8 Analyzer स्किल का इस्तेमाल भी किया जा सकता है. इससे आपको अपने ऐप्लिकेशन के लिए, कीप रूल को ऑप्टिमाइज़ करने के बारे में ज़्यादा जानकारी मिलेगी. Bazel का इस्तेमाल करने पर, आपके पास R8 Configuration Analyzer का ऐक्सेस भी होता है; rules_android R8 ऑप्टिमाइज़ेशन से जुड़ा दस्तावेज़ देखें.

नॉन-R8 ऑप्टिमाइज़र और DEX पोस्ट-प्रोसेसर

अगर आपकी बिल्ड पाइपलाइन में कस्टम बिल्ड टूल या सेकंडरी DEX पोस्ट-प्रोसेसर का इस्तेमाल किया जाता है, तो अपने ऐप्लिकेशन को बेहतर तरीके से ऑप्टिमाइज़ करने के लिए, यह तरीका अपनाएं:

  • Android Studio में अपना ऐप्लिकेशन बंडल खोलें और उसे APK ऐनालाइज़र में देखें.
  • .dex फ़ाइलें चुनें.
  • "नामों को साफ़ तौर पर दिखाएं" बटन को टॉगल करते समय, सबसे बड़े साइज़ वाली फ़ाइलों पर खास ध्यान दें. ध्यान दें: इसके लिए, आपको mapping.txt फ़ाइल लोड करनी होगी. अगर आपको पता चलता है कि कुछ फ़ाइलें कोड को छिपाने के बाद भी बड़ी हैं, तो हो सकता है कि उन पर पैकेज-वाइड कीप नियम लागू हों.
  • अपनी proguard-rules.pro फ़ाइल, configuration.txt या ऑप्टिमाइज़र के लिए इसके बराबर की फ़ाइल में देखें. ऐसा तब करें, जब R8 का इस्तेमाल न किया जा रहा हो. साथ ही, ऐसे पैकेज से मैच करने वाले नियम खोजें जिन्हें छिपाया नहीं जा रहा है. उदाहरण के लिए, अगर आपकी DEX फ़ाइलों में com.foo. एक बड़ा पैकेज है, तो -keep com.foo.** या -keep com.foo.bar.** फ़ॉर्मैट के लिए, 'रखें' नियम देखें.
  • ध्यान रखें कि लाइब्रेरी के उपभोक्ता के डेटा को सुरक्षित रखने से जुड़े कीप नियमों की पहचान करना इतना आसान नहीं होता. अगर आपको लगता है कि लाइब्रेरी के उपभोक्ता नियम से ऑप्टिमाइज़ेशन पर असर पड़ रहा है, तो android analyze <library>.aar का इस्तेमाल करके लाइब्रेरी की सीधे तौर पर जांच की जा सकती है. इसके अलावा, एजीपी के हाल ही के वर्शन का इस्तेमाल करके, लाइब्रेरी को अलग से मौजूद सैंपल ऐप्लिकेशन में जोड़कर और R8 कॉन्फ़िगरेशन ऐनलाइज़र की मदद से उसकी जांच करके, उसकी पुष्टि की जा सकती है.